久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      正則表達式中的反向預(yù)搜索實現(xiàn)

      在以前的應(yīng)用,大多是應(yīng)用正向預(yù)搜索情況。也就是說,在查找內(nèi)容的右面有特定的內(nèi)容限定,例如下面的例子:


      [Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]

      (.*(?=;OS:) 就是典型的正向預(yù)搜索,只有右面內(nèi)容是“;OS: ”才會被匹配到。

      但是現(xiàn)在要實現(xiàn)的效果,左面的內(nèi)容是固定,而不是右面??墒荍avaScript并不支持反向預(yù)搜索。我相信,細心的朋友已經(jīng)發(fā)現(xiàn)了,其實上面的例子已經(jīng)達到了這個目的(前面的Memory:s+ 限定了左面的內(nèi)容)。下面再給出一個例子:

      復(fù)制代碼 代碼如下:
      //程序目的,去掉圖片路徑中的域名
      var str = ‘<img src=”http://news.163.com/sports/yao.jpg” src=”http://news.163.com/sports/yao.jpg”>’;
      var reg1 = /(<img)(.*(?=(http|https)://))((http|https)://[^/]*)/gim;
      str.match(reg1);
      alert(str.replace(RegExp.$4,”));

      那么到底有沒有反向預(yù)搜索呢?答案是肯定的,可是現(xiàn)實是殘酷的。我查閱了一些資料,上面提到反向預(yù)搜索的形式是以?<= 或者?<! 為引導(dǎo)的。遺憾的是JavaScript并不支持,在高版本的Java中已獲支持,于是就編寫了下面的測試程序(JRE1.6.0_03):

      復(fù)制代碼 代碼如下:
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      public class RegExpTest {
          public static void main(String[] args){
              Pattern p = Pattern.compile(“((?<=\<img.*(?=(http|https)))(http|https))”);
              Matcher matcher = p.matcher(“<img src=”http://news.163.com/sports/yao.jpg” src=”http://news.163.com/sports/yao.jpg”/>”);
              System.out.println(matcher.matches());
          }
      }

      程序本身應(yīng)該沒有什么問題,但是運行結(jié)果:
      Exception in thread “main” java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 27
      ((?<=<img.*(?=(http|https)))(http|https))
      我Google了半天,最后得到的唯一結(jié)果就是換種寫法。希望看到這篇文章的朋友,如果已經(jīng)實現(xiàn)了這種效果,一定要留言不吝賜教。
      另外,在我看文檔時看到了?:引導(dǎo)的正則表達式,上面說是“匹配不存儲”,百思不得其解。感覺還是代碼來的實在,寫一個看一下:

      復(fù)制代碼 代碼如下:
      var str2 = ‘客戶端名稱’;
      var reg2 = /(客戶端名(?:稱)?)/;
      str2.match(reg2);
      alert(RegExp.$1); //客戶端名稱
      alert(RegExp.$2); //空字符串
      //不使用?:
      reg2 = /(客戶端名(稱)?)/;
      str2.match(reg2);
      alert(RegExp.$1); //客戶端名稱
      alert(RegExp.$2); //稱

      敏捷開發(fā)思想說:代碼是最好的文檔。給了我借口,呵呵。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號