jsRegexreplace裡有變數的解決方案用到RegExp類

來源:互聯網
上載者:User

標籤:定義   i++   文章   利用   com   span   運行   archive   函數   

一直比較害怕使用Regex,貌似很深奧很複雜的樣子,所以在用js操作字串的時候,我最多使用的是replace、split、substring、indexOf等函數,這些函數有時候需要多次疊加使用,但是用起來比較簡單,文法和書寫格式比較容易記住,所以使用率是相當高的。

今天在操作一段字串時,需要揪出字串裡的一個數字,雖然用split、substring、indexOf這幾個函數的結合使用能實現,但是如果用下Regex,則效果好很多,Regex的最大作用不就是匹配嗎?於是嘗試使用Regex來編寫程式。

  • var s = ‘我正在使用卡卡網www.webkaka.com來測試網站速度‘;
  • var s = s.replace(/([\s\S]*)卡卡網([a-z.]*)([\s\S]*)/ig,‘$2‘);
  • alert(s);

 

這樣的結果可以得到網址“www.webkaka.com”。

但是當上述語句的“卡卡網”是一個變數時,replace()就出現了問題。

我開始這樣寫:

  • var s = ‘我正在使用卡卡網www.webkaka.com來測試網站速度‘;
  • var words = ‘卡卡網‘;
  • var s = s.replace(/([\s\S]*)‘+words+‘([a-z.]*)([\s\S]*)/ig,‘$2‘);
  • alert(s);

 

但是運行結果是:我正在使用卡卡網www.webkaka.com來測試網站速度。也就是沒有把網址給取出來。

然後又試了很多方法,都不頂用。

看來這裡用replace()是行不通了,最後解決的方式變得比較複雜,寫法如下:

  • var s = ‘我正在使用卡卡網www.webkaka.com來測試網站速度‘;
  • var words = ‘卡卡網‘;
  • var regExp=new RegExp("([\s\S]*)"+words+"([a-z.]*)([\s\S]*)","gmi");
  • regExp.test(s);
  • var url = RegExp.$2;
  • alert(url);

 

運行結果是:www.webkaka.com

這裡用到RegExp類,下面解釋下上述語句的含義。

  • var regExp=new RegExp(); //是定義一個Regex執行個體

 

[\s\S]* 可以匹配所有字元,包括分行符號等不可見符號。

[a-z.]* 是匹配網址,當然,這個寫法只能匹配包含小寫字元的網址,擴充寫法是[a-zA-Z0-9.~]*就可以包含大部分網址了。

gmi 是,g表示全域掃描,如果不加,那麼只匹配第一個匹配到的。加了g選項後,每一次匹配後,就會往下匹配。當掃描不到匹配的字元時,則返回null。i表示不區分大小寫。

regExp.test(s); //s是原字串,用regExp的正則去匹配出想要的一段字串。

RegExp.$2; //這個是取第2個匹配項,每一個括弧()是一個匹配項。

 

 

知識擴充

jsRegex基本文法及簡單一實例

1、 javascript 正則對象建立 和用法

聲明javascript Regex

  • var reCat = new RegExp("cat");

 

你也可以 

  • var reCat = /cat/;      //Perl 風格   (推薦)

 

2 、學習最常用的 test exec match search  replace  split 6個方法

1) test  檢查指定的字串是否存在

  • var data = "123123";
  • var reCat = /123/gi;
  • alert(reCat.test(data));  //true

 

//檢查字元是否存在  g 繼續往下走  i 不區分大小寫

2) exec 返回查詢值

  • var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
  • var reCat = /cat/i;
  • alert(reCat.exec(data));  //Cat

 

 3)match  得到查詢數組

  • var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
  • var reCat = /cat/gi;
  • var arrMactches = data.match(reCat)
  • for (var i=0;i < arrMactches.length ; i++)
  • {
  •     alert(arrMactches[i]);   //Cat  cat
  • }

 

4) search  返回搜尋位置  類似於indexof

  • var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
  • var reCat = /cat/gi;
  • alert(data.search(reCat));  //23

 

5) replace  替換字元  利用正則替換

  • var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
  • var reCat = /cat/gi;
  • alert(data.replace(reCat,"libinqq"));

 

6)split   利用正則分割數組

  • var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
  • var reCat = /\,/;
  • var arrdata = data.split(reCat);
  • for (var i = 0; i < arrdata.length; i++)
  • {
  •     alert(arrdata[i]);
  • }

 

3、學習下  簡單類   負向類  範圍類  組合類別

 //簡單類

  • var data = "1libinqq,2libinqq,3libinqq,4libinqq";
  • var reCat = /[123]libinqq/gi;
  • var arrdata = data.match(reCat);
  • for (var i = 0; i < arrdata.length; i++)
  • {
  •     alert(arrdata[i]);  // 1libinqq 2libinqq  3libinqq
  • }

 

 //負向類

  • var data = "alibinqq,1libinqq,2libinqq,3libinqq,4libinqq";  //\u0062cf
  • var reCat = /[^a123]libinqq/gi;
  • var arrdata = data.match(reCat);
  • for (var i = 0; i < arrdata.length; i++)
  • {
  •     alert(arrdata[i]);  //4libinqq
  • }

 

//範圍類

  • var data = "libinqq1,libinqq2,libinqq3,libinqq4,libinqq5";  //\u0062cf
  • var reCat = /libinqq[2-3]/gi;
  • var arrdata = data.match(reCat);
  • for (var i = 0; i < arrdata.length; i++)
  • {
  •     alert(arrdata[i]);   // libinqq2  libinqq3
  • }

 

//組合類別

  • var data = "a,b,c,w,1,2,3,5";  //\u0062cf
  • var reCat = /[a-q1-4\n]/gi;
  • var arrdata = data.match(reCat);
  • for (var i = 0; i < arrdata.length; i++)
  • {
  •     alert(arrdata[i]);  // a b c 1 2 3
  • }

 

您可能對以下文章也感興趣

asp.netRegex提取網頁網址、標題、圖片執行個體以及過濾所有HTML標籤執行個體

總結:asp.net分割字串的幾種方法

java中用Regex判斷字串是否數字

jsRegexreplace裡有變數的解決方案用到RegExp類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.