一直比較懼怕使用正則表達式,貌似很深奧很複雜的樣子,因此在用js操做字符串的時候,我最多使用的是replace、split、substring、indexOf等函數,這些函數有時候須要屢次疊加使用,可是用起來比較簡單,語法和書寫格式比較容易記住,因此使用率是至關高的。javascript
今天在操做一段字符串時,須要揪出字符串裏的一個數字,雖然用split、substring、indexOf這幾個函數的結合使用能實現,可是若是用下正則表達式,則效果好不少,正則表達式的最大做用不就是匹配嗎?因而嘗試使用正則表達式來編寫程序。html
- var s = '我正在使用卡卡網www.webkaka.com來測試網站速度';
- var s = s.replace(/([\s\S]*)卡卡網([a-z.]*)([\s\S]*)/ig,'$2');
- alert(s);
這樣的結果能夠獲得網址「www.webkaka.com」。java
可是當上述語句的「卡卡網」是一個變量時,replace()就出現了問題。web
我開始這樣寫:正則表達式
- 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來測試網站速度。也就是沒有把網址給取出來。swift
而後又試了不少方法,都不頂用。數組
看來這裏用replace()是行不通了,最後解決的方式變得比較複雜,寫法以下:asp.net
- 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(); //是定義一個正則表達式實例
[\s\S]* 能夠匹配全部字符,包括換行符等不可見符號。
[a-z.]* 是匹配網址,固然,這個寫法只能匹配包含小寫字符的網址,擴充寫法是[a-zA-Z0-9.~]*就能夠包含大部分網址了。
gmi 是,g表示全局掃描,若是不加,那麼只匹配第一個匹配到的。加了g選項後,每一次匹配後,就會往下匹配。當掃描不到匹配的字符時,則返回null。i表示不區分大小寫。
regExp.test(s); //s是原字符串,用regExp的正則去匹配出想要的一段字符串。
RegExp.$2; //這個是取第2個匹配項,每個括號()是一個匹配項。
知識擴充
js正則表達式基本語法及簡單實例
一、 javascript 正則對象建立 和用法
聲明javascript 正則表達式
- 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]);
- }
三、學習下 簡單類 負向類 範圍類 組合類
//簡單類
- 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.net正則表達式提取網頁網址、標題、圖片實例以及過濾全部HTML標籤實例
總結:asp.net分割字符串的幾種方法
java中用正則表達式判斷字符串是否數字