簡寫 | 完整寫法 | 語意 |
---|---|---|
. | [^/n/r] | 除了換行和回車以外的任意字符 |
/d | [0-9] | 數字字符 |
/D | [^0-9] | 非數字字符 |
/s | [/t/n/xOB/f/r] | 空白字符 |
/S | [^/t/n/xOB/f/r] | 非空白字符 |
/w | [a-zA-Z_0-9] | 單詞字符 |
/W | [^a-zA-Z_0-9] | 非單詞字符 |
1.基本元字符
. | 匹配任意的非換行字符,常常表示通用元字符使用 |
[] | 匹配一個出現在[]中的字符,eg:[123],[a-z] |
() | 1.分組 2.提升優先級 |
| | 或者 eg:foot|food表示匹配foot或者food 注:|的優先級很低 |
2.限定元字符
符號 | 語意 |
+ | 一個或者多個{1,} |
* | 0個或者多個{0,} |
? | 0個或者1個 |
{n} | 取n個 |
{n,} | 取n個到多個 |
{n,m} | 取n個到m個 |
3.首尾元字符
符號 | 語意 |
---|---|
^ | 1.必須以什么開頭2.表示否定 |
$ | 1.必須以什么結尾2.表示組引用eg: a(b)c |
4.其它
符號 | 語意 |
---|---|
(?:) | 表示不加入到數組中 |
eg:
var s = '1234567'; var r1 = /(/d)(/d/d/d)(/d/d)(/d)/; r1.exec( s ); // => [ '1234567', '1', '234', '56', '7' ] var r2 = /(/d)(?:/d/d/d)(/d/d)(/d)/; r2.exec( s ); // => [ '1234567', '1', '56', '7' ]方法 | 說明 |
test | 用來檢測字符串是否符合定義的正則規則 |
exec | 利用正則表達式去處理字符串,并將字符串中符合正則表達式的數據提取出來,(1).如果匹配上了,就返回數組,第0項就是匹配到的結果(2)如果正則表達式 中有分組也就是有(),那么對應的第n組匹配到的結果就是在這個數組中的第n項,n從1開始(3)如果沒有匹配的則返回null; |
replace | replace(正則表達式,需要替換的字符串) |
1.exec方法的進一步說明: (1)exec匹配提取,只能匹配提取第一個被捕獲的數據 所以如果需要匹配字符串中所有符合要求的字符串,需要開啟全局模式,這種情況下,調用一次exec方法就會在上一次的基礎上匹配。 eg:
var data = '1234567'; var p = //d/g; p.exec(data);//["1"] p.exec(data);//["2"] ... p.exec(data);//null p.exec(data);//["1"]一般我們通過以下方法實現:var a = "1234567ni";var p = //d/g;var m;var arr = [];while((m = p.exec(a)) != null){ arr.push(m);}console.log(arr);(2)正則表達式的貪婪模式:如果一個正則表達式中有多個.+或者.*的結構,那么在匹配的時候就會造成歧義,這時候就滿足一個規則,即貪婪模式;在貪婪模式中,從左到右匹配個數的能力是左強右弱,而且是只有兩個級別的,要么強,要么弱。
eg:
var ddd = "1234567"; "123456" "" "7"var pp = /(.+)(.*)(.+)/;pp.exec(ddd) //["1234567", "123456", "", "7"]2.replace方法的進一步說明: (1) 例如將var data = “abccdad”中的a全部替換成e;
data.replace(/[a]/g,"e");(2)在替換中也可以使用到組 例如常用的更改年月日的顯示方式,將2015-1-10改成2015年1月10日
var data = "2015-1-10";var pp = /(/d+)-(/d+)-(/d+)/;data.replace(pp,'$1年$2月$3日');(3)在替換的時候,第二個參數也可以是一個函數,而函數的參數表示的是匹配到的數組的值,因此前邊日期的替換我們可以利用函數的返回值替換匹配到的結果。
var data = "2015-1-10";var pp = /(/d+)-(/d+)-(/d+)/;data.replace(pp,function(match,n1,n2,n3){ return n1 + '年' + n2 + '月' + n3 + '月';})新聞熱點
疑難解答