Regex的用法十分複雜,完全可以用一本書來講述。這裡只記錄一些簡單的常用的用法。
1.js裡面通過RegExp類來實現Regex的。
var reCat = new RegExp("cat"); //匹配串中第一個"cat"
var reCat = new RegExp("cat","g"); //匹配串中所有的"cat","g"是global的意思
var reCat = new RegExp("cat","gi"); //匹配串中所有的"cat",不區分大訊息,"i"是insensitive的縮寫
var reCat = /cat/gi; //perl風格
2.RegExp的方法
(1)test() 判斷是否匹配,返回 true 或者 false
var sTomatch ="cat";
var reCat = /cat/;
alert(reCat.test(sTomatch));//outputs true
(2)exec() 返回一個數組,數組中的第一個條目是第一個匹配
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/;
var arrMatches = reAt.exec(sTomatch);
alert(arrMatches.toString()); //outputs 'at'
3.String對象對Regex的支援
(1)match()方法
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches.toString()); //outputs 'at,at, At ,aT ,aT ,at';
(2)replace()方法
var sToChange = "this red paper is not very red";
alert(sToChange.replace("red","blue"));//只替換第一個"red",outputs "this blue paper is not very red"
要想全部替換,如下
var sToChange = "this red paper is not very red";
var reRed = /red/gi;
alert(sToChange.replace(reRed,"blue"));
(3)split()方法
var sColor = "red,blue,yellow,green";
var reCom = /\,/ ; //因為","是Regex的元字元,所以用"\"來轉義
var arrColors = sColor.split(reCom);
上面方法的效果等同於
var sColor = "red,blue,yellow,green";
var arrColors = sColor.split(",");
4.簡單模式
(1)元字元。
Regex的所有元字元如下:
( [ { \ ^ $ | ) ? * + .
任何Regex要使用元字元,都必須轉義:
var reTest = /\?/ ;
或者:
var reTest = new RegExp("\\?"); //注意:是兩個反斜線,為了避免js像處理 \n 一樣處理 \? ,必須雙重轉義。
如果刪除字串中的所有分行符號,如下:
var sNewStr = sOldStr.replace(/\n/g,"");
(2)字元類:
<1>.簡單類 使用[abc] ,表示匹配中括弧內的字元
var reTest = /[abc]at/gi; //匹配串中'at'字元前是'a'或者'b'或者'c'
例如:
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[abc]at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'bat, Cat, baT, cat';
<2>.負向類 使用[^abc],表示不匹配中括弧內的字元
var reTest = /[abc]at/gi; //匹配串中'at'字元前不是'a'不是'b'不是'c'
例如:
var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[^abc]at/gi;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'fAt,faT';
<3>.範圍類 [a-z] ,表示匹配a到z範圍之間的
例如:
var sTomatch = "num1,num2,num3,num4,num5";
var reAt = /num[1-3]/g;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'num1,num2,num3';
<4>.組合類別 [a-z1-4\n] 標識匹配所有a~z,1~4 以及一個分行符號
例如:
var sTomatch = "num1,numanuma,numb,num4,num5,num?num3numt,num9";
var reAt = /num[1-3a-m\n]/g;
var arrMatches = sTomatch.match(reAt);
alert(arrMatches); //outputs 'num1,numa,numa,numb,num?,num3';
<5>.預定義類 由於經常用到一些模式,Regex預定義了一些常用匹配:如下:
代碼 |
等同於 |
匹配 |
. |
[^\n\r] |
除了換行和斷行符號之外的任一字元 |
\d |
[0-9] |
數字 |
\D |
[^0-9] |
非數字 |
\s |
[ \r\n\x0B\f\r] |
空白字元 |
\S |
[^\r\n\x0B\f\r] |
非空白字元 |
\w |
[a-zA-Z_0-9] |
單詞字元(所有的字母、數字、底線) |
\W |
[^a-zA-Z_0-9] |
非單詞字元 |
<6>.簡單量詞,如下表:
代碼 |
描述 |
? |
出現零次或一次 |
* |
出現零次或多次(任意次) |
+ |
出現一次或多次(至少出現一次) |
{n} |
一定出現n次 |
{n,m} |
至少出現n次,但不超過m次 |
{n,} |
至少出現n次 |
例如,想匹配單詞bread,red或read:
var reB = /b?rea?d/;