1.正則中的特殊字符
\ 作爲轉意,即一般在"\"後面的字符不按原來意義解釋,如/b/匹配字符"b",當b前面加了反斜杆後/\b/,轉意爲匹配一個單詞的邊界。
-或-
對正則表達式功能字符的還原,如"*"匹配它前面元字符0次或屢次,/a*/將匹配a,aa,aaa,加了"\"後,/a\*/將只匹配"a*"。
^ 匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a"
$ 匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或屢次,/ba*/將匹配b,ba,baa,baaa
+ 匹配前面元字符1次或屢次,/ba*/將匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/將匹配b,ba
(x) 匹配x保存x在名爲$1...$9的變量中
x|y 匹配x或y
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配這個集合中的任一一個字符(或元字符)
[^xyz] 不匹配這個集合中的任何一個字符
[\b] 匹配一個退格符
\b 匹配一個單詞的邊界
\B 匹配一個單詞的非邊界
\cX 這兒,X是一個控制符,/\cM/匹配Ctrl-M
\d 匹配一個字數字符,/\d/ = /[0-9]/
\D 匹配一個非字數字符,/\D/ = /[^0-9]/
\n 匹配一個換行符
\r 匹配一個回車符
\s 匹配一個空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一個非空白字符,等於/[^\n\f\r\t\v]/
\t 匹配一個製表符
\v 匹配一個重直製表符
\w 匹配一個能夠組成單詞的字符(alphanumeric,這是個人意譯,含數字),包括下劃線,如[\w]匹配"$5.98"中的5,等於[a-zA-Z0-9]
\W 匹配一個不能夠組成單詞的字符,如[\W]匹配"$5.98"中的$,等於[^a-zA-Z0-9]。
\ f 換頁符
\ n 換行符
\ r 回車
\ t 製表符
i 執行大小寫不敏感的匹配
g 執行一個全局的匹配,簡而言之,就是找到全部的匹配,而不是在找到第一個以後就中止了
*:除屬性 g 和 i 以外,正則表達式就沒有其它像屬性同樣的特性了.若是將構造函數 RegExp 的靜態屬性 multiline 設置爲 true ,那麼模式匹配將以多行的模式進行. 在這種模式下,錨字符 ^ 和 $ 匹配的不僅是檢索字符串的開頭和結尾,還匹配檢索字符串內部的一行的開頭和結尾.例如: 模式 /Java$/ 匹配的是 "Java",可是並不 匹配正則表達式
"Java\nis fun" .若是咱們設置了 multiline 屬性,那麼後者也將被匹配:express
RegExp.multiline = true;數組
[a-z] //匹配全部的小寫字母 [A-Z] //匹配全部的大寫字母 [a-zA-Z] //匹配全部的字母 [0-9] //匹配全部的數字
[0-9\.\-] //匹配全部的數字,句號和減號 [ \f\r\t\n] //匹配全部的白字符
^表示字符串的開頭,但它還有另一個含義。當在一組方括號裏使用^是,它表示"非"或"排除"的意思,經常用來剔除某個字符。
2.定義正則表達式的方法
var reg=//
var reg=new RegExp()
3.正則表達式對象的方法
compile 正則表達式比較
exec 執行查找
test 進行匹配
toSource 返回特定對象的定義(literal representing),其值可用來建立一個新的對象。重載Object.toSource方法獲得的。
toString 返回特定對象的串。重載Object.toString方法獲得的。
valueOf 返回特定對象的原始值。重載Object.valueOf方法獲得
4.exec方法:
若是 exec 方法沒有找到匹配,將返回 null。若是找到匹配項,則 exec 方法返回一個數組,並將更新全局 RegExp 對象的屬性以反映匹配結果。數組元素 0 包含了完整的匹配項,而元素 1 到 n 包含的是匹配項中出現的任意一個子匹配項。這至關於沒有設置全局標誌 (g) 的 match 方法的行爲。ide
若是爲正則表達式設置了全局標誌,則 exec 從 lastIndex 值指示的位置開始搜索字符串。若是沒有設置全局標誌,則 exec 忽略 lastIndex 的值,從字符串的起始位置開始搜索。函數
exec 方法返回的數組有三個屬性:input、index 和 lastIndex。input 屬性包含整個被搜索的字符串。 index 屬性包含了在整個被搜索字符串中匹配的子字符串的位置。 lastIndex 屬性中包含了匹配中最後一個字符的下一個位置。ui
eg:spa
var objStr="個人手機號13522222222,他的手機號13288888888,她的手機號碼13699999999";3d
var reg=/13(\d)(\d{8})/g;code
var arr=reg.exec(objStr);對象
console.log(arr);
=======>結果:
5.利用正則封裝模板替換代碼
/* 抽取爲一個方法 爲了 替換 模板中的 {name}這類文字 參數1:使用模板 既挖好坑的 字符串 {name} 這樣的 參數2:對象 */ function my_template(templateString, obj) { // 定義正則 var reg = /{(\w+)}/; // 查找並替換 須要經過循環的方式 去肯定次數 var result; // 這裏只寫了一個=號 會先將括號中的 代碼執行掉 判斷正則驗證完畢以後的結果 若是爲null 跳出 while (result = reg.exec(templateString)) { // 進行替換 0:{name} 1:name // 從結果中獲取 替換的文本 以及 屬性的名字 var replaceString = result[0]; var key = result[1]; // 替換咱們傳入的 這個 模板字符串 templateString = templateString.replace(replaceString, obj[key]); } // 若是可以執行到這裏 說明 替換完畢了 // console.log(templateString); // 放心大膽的 return return templateString; }