參數(shù):
g: 全局匹配;找到所有匹配,而不是在第一個(gè)匹配后停止
i: 忽略大小寫
m: 多行; 將開始和結(jié)束字符(^和$)視為在多行上工作(也就是颈渊,分別匹配每一行的開始和結(jié)束(由 \n 或 \r 分割),而不只是只匹配整個(gè)輸入字符串的最開始和最末尾處。
u: Unicode; 將模式視為 Unicode 序列點(diǎn)的序列; (能匹配到碼點(diǎn)大于 0Xffff 的字符)
y: 粘性匹配; 僅匹配目標(biāo)字符串中此正則表達(dá)式的 lastIndex 屬性指示的索引(并且不嘗試從任何后續(xù)的索引匹配)。
s: dotAll 模式滑蚯,匹配任何字符(包括終止符'\n') ----> var str = 'abc\n'; var reg = /.+/gs; reg.exec(str) // 連換行符也能匹配出來。
".": 匹配任意單個(gè)字符抵栈,但是行結(jié)束符除外: \n \r \u2028 或 \u2029告材。
字符類別:
- . : 匹配任意單個(gè)字符,但是行結(jié)束符除外: \n \r 古劲。
- \d: [0-9]
- \D: [^0-9]
- \w: [A-Za-z0-9_],匹配任意來自基本拉丁字母表中的字母數(shù)字字符斥赋,還包括下劃線。
- \W: [^a-za-z0-9_]
- \s: 匹配一個(gè)空白符产艾,包括空格疤剑、制表符洛波、換頁(yè)符和其它 unicode 空格。 等價(jià)于[\f\n\r\t\v\u00a0\u1680?\u180e\u2000?\u2001\u2002?\u2003\u2004? \u2005\u2006?\u2007\u2008?\u2009\u200a?\u2028\u2029??\u202f\u205f? \u3000] -----> eg: /\s\w*/.exec('foo bar') // bar: 匹配空格后面的字符
- \S: [^ \f\n\r\t\v\u00a0\u1680?\u180e\u2000?\u2001\u2002?\u2003\u2004? \u2005\u2006?\u2007\u2008?\u2009\u200a?\u2028\u2029??\u202f\u205f? \u3000]
- \t: 匹配一個(gè)水平制表符(tab)
- \r: 匹配一個(gè)回車符(carriage return)
- \n: 匹配一個(gè)換行符(linefeed)
- \v: 匹配一個(gè)垂直制表符(vertical tab)
- \f: 匹配一個(gè)換頁(yè)符(form-feed)
- \0: 匹配一個(gè) NUL 字符骚露。 不要再此后面跟小數(shù)點(diǎn)。
字符集合:
- [xyz]: 一個(gè)字符集合缚窿,也叫字符組棘幸。 匹配集合中的任意“一個(gè)”字符。 可以使用連字符號(hào)指定范圍: [a-d] === [abcd][^xyz]: 反義字符組倦零。 也可以使用連字符號(hào)表示范圍误续。 [^a-d] === [^abcd]
- ^: 匹配從什么開始。 /^A/不匹配'an A'中的 A扫茅,但匹配'An A'中的'A'
> 注意點(diǎn): 當(dāng)使用構(gòu)造函數(shù)創(chuàng)造正則對(duì)象時(shí)蹋嵌,需要常規(guī)的字符轉(zhuǎn)義規(guī)則(在前面加反斜杠\)。 eg: var re = new RegExp('\\w+') === var reg = /\w+/
var str = "abc";
var reg = /.+/g;
reg.exec(str); // 'abc'
先行斷言: x 只有在 y 前面才匹配葫隙,必須寫成/x(?=y)栽烂。
/\d+(?=%)/.exec("100% of US")[0]; // ['100']
后行斷言: x 只有不在 y 前面才匹配。
/(?!%)\D/.exec("100% of US")[0]; //