字面量:var reg = /abc/;正則表達式
構造函數:var reg = new RegExp('abc');數組
g:global 全文搜索,如不添加g,搜索到第一個匹配中止函數
i:ignore case 忽略大小寫,默認大小寫敏感測試
m:multiple lines 多行搜索spa
\t 水平製表符prototype
\v 垂直製表符3d
\n 換行符regexp
\r 回車符對象
\0 空字符ip
\f 換頁符
\cX 與X對應的控制字符(Ctrl+X)
[ ]:構建一個簡單的類,如'[a1b2c3d4]'.replace(/[abc]/g,'x')---->x1x2x3d4
[^abc],表示不是字符a或b或c的內容。'[a1b2c3d4]'.replace(/[^abc]/g,'x')---->axbxcxxx
[a-z]:從a到z任意字符,包括a和z
[a-zA-Z]:從a到z大小寫
[0-9-]:從0到9包括‘-’
.:等價於[^\r\n] 除了回車符和換行符以外的全部字符
\d:等價於[0-9] 數字字符
\D:等價於[^0-9] 非數字字符
\s:等價於[\t\n\x0B\f\r] 空白符
\S:等價於[^\t\n\x0B\f\r] 非空白符
\w:等價於[a-zA-Z_0-9] 單詞字符(字母、數字、下劃線)
\W:等價於[^a-zA-Z_0-9] 非單詞字符
^:以xxx開始
$:以xxx結束
\b:單詞邊界
\B:非單詞邊界
?:出現零次或一次(最多出現一次)
+:出現一次或屢次(至少出現一次)
*:出現零次或屢次(任意次)
{n}:出現n次
{n,m}:出現n到m次
{n,}:至少出現n次
貪婪模式:儘量多的匹配 如:'12345678'.replace(/\d{3,6}/g,'X');----->'X78'
非貪婪模式:在量詞後面加上?便可。讓正則表達式儘量少的匹配,一旦匹配成功便再也不繼續匹配。如:'12345678'.replace(/\d{3,6}?/g,'X');----->'XX78'
( ):分組,使量詞做用於分組 如:'a1b2c3d4'.replace(/([a-z]\d){3}/g,'X');---->'Xd4'
|:或 如:'abonerabcaer'.replace(/ab(on|ca)er/g,'X')---->'XX'
反向引用:用$1-$n來表明捕獲的分組
如:'2016-11-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1')----->'11/25/2016'
忽略分組:不但願捕獲某些分組,只需在分組內加上? : 就能夠
如:(?:bad).(boy)
前瞻:正則表達式從文本頭部向尾部開始解析,文本尾部方向,稱爲「前」。前瞻就是在正則表達式匹配到規則的時候,向前檢查是否符合斷言,後顧/後瞻方向相反。
JavaScript不支持後顧。
符合和不符合特定斷言稱爲確定/正向匹配和否認/負向匹配
正向前瞻:exp(?=assert)
如:\w(?=)
'a2*3'.replace(/\w(?=\d)/g,'X')---->'X2*3'
'a2*34b8'.replace(/\w(?=\d)/g,'X')---->'X2*X4X8'
負向前瞻:exp(?!assert)
如:'a2*34b8'.replace(/\w(?!\d)/g,'X')---->'aX*3Xb8'
正向後顧:exp(?<=assert) JavaScript不支持
負向後顧:exp(?<!assert) JavaScript不支持
global:是否全文搜索,默認false
ignore case:是否大小寫敏感,默認是false
multiline:多行搜索,默認值是false
lastIndex:當前表達式匹配內容的最後一個字符的下一個位置
source:正則表達式的文本字符串
如:var reg = /\w/; reg.source----->'\w'
用於測試字符串參數中是否存在匹配正則表達式模式的字符串,若是存在返回true,不然返回false
如:var reg1 = /\w/; var reg2 = /\w/g; while(reg2.test('ab')){console.log(reg2.lastIndex);}---->1 2
使用正則表達式模式對字符串執行搜索,並將更新全局RegExp對象的屬性以反映匹配結果
若是沒有匹配的文本則返回null,不然返回一個結果數組
非全局調用:調用非全局的RegExp對象的exec()時,返回數組。第一個元素是與正則表達式相匹配的文本;第二個元素是與RegExpObject的第一個子表達式相匹配的文本(若是有的話);第三個元素是與RegExp對象的第二個子表達式相匹配的文本(若是有的話),以此類推
search()方法用於檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串
方法返回第一個匹配結果Index,查找不到返回-1
search()方法不執行全局匹配,它將忽略標誌g,而且老是從字符串的開始進行檢索
match()方法將檢索字符串,以找到一個或多個與regexp匹配的文本
regexp是否具備標誌g,對結果影響很大
非全局調用:
若是regexp沒有標誌g,那麼match()方法就只能在字符串中執行一次匹配;
若是沒有找到任何匹配的文本,將返回null;
不然它將返回一個數組,其中存放了與它找到的匹配文本有關的信息;
返回數組的第一個元素存放的是匹配文本,而其他的元素存放的是與正則表達式的子表達式匹配的文本;
除了常規的數組元素以外,返回的數組還含有2個對象屬性
index聲明匹配文本的起始字符在字符串的位置
input聲明對stringObject的引用
全局調用:
若是regexp具備標誌g則match()方法將執行全局檢索,找到字符串中全部匹配的子字符串
沒有找到任何匹配的子串,則返回null
若是找到了一個或多個匹配子串,則返回一個數組
數組元素中存放的是字符串中全部的匹配子串,並且也沒有index屬性或input屬性
split方法把字符串分割爲字符數組
如:'a,b,c,d'.split(',');---->['a','b','c','d']
一些複雜的分割狀況下咱們可使用正則表達式解決
如:'a1b2c3d'.split(/\d/g);---->['a','b','c','d']
String.prototype.replace(str,replaceStr)
String.prototype.replace(reg,replaceStr)
String.prototype.replace(reg,function)
function參數含義
function會在每次匹配替換的時候調用,有四個參數
匹配字符串
正則表達式分組內容,沒有分組則沒有該參數
匹配項在字符串中的index
原字符串