限定符也指数量词(Quantifiers),用来指定正则表达式的一个给定模式必须要出现多少次才能满足匹配
限定符集
| |
| 例如,zo* 能匹配 "z" 以及 "zoo",* 等价于{0,}
|
| 例如,'zo+' 能匹配 "zo" 以及 "zoo",+ 等价于 {1,}
|
| 例如,"do(es)?" 可以匹配 "do" 、 "does" ,? 等价于 {0,1}
|
| 像 * 和 + 一样匹配前面的模式,但匹配是最小可能匹配 例如,/".*?"/匹配 '"foo" "bar"' 中的 '"foo"'
|
| 例如,/x(?=y)/ 只有在 'x' 后面紧跟着 'y' 时,才会匹配它
|
| 例如,/\d+(?!\.)/.exec("3.141") 匹配 141 而不是 3.141
|
| 例如,'o{2}' 不能匹配 "Bob" 中的 'o',匹配 "food" 中的两个 o
|
| 例如,'o{2,}' 不能匹配 "Bob" 中的 'o',匹配 "foooood" 中的所有 o 'o{1,}' 等价于 'o+','o{0,}' 则等价于 'o*'
|
| 例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o
|
限定符模式
贪婪模式
贪婪模式,指在整个表达式匹配成功的前提下,尽可能多的匹配;贪婪模式的量词:"{m,n}","{m,}","?","*"和"+"
/zo*/.test('zooooooo'); // true
/zo{0,}/.test('zooooooo'); // true
/zo*/.test('zmooooo'); // true
/zo{0,}/.test('zooooooo'); // true
/zo+/.test('zooooooo'); // true
/zo{1,}/.test('zooooooo'); // true
/zo+/.test('zmooooo'); // false
/zo{1,}/.test('zmooooo'); // false
/zo?/.test('zooooooo'); // true
/zo{0,1}/.test('zooooooo'); // true
/zo?/.test('zmooooo'); // true
/zo{0,1}/.test('zmooooo'); // true
非贪婪模式(最小可能匹配)
非贪婪模式,指在整个表达式匹配成功的前提下,尽可能少的匹配;在贪婪模式量词后加上“?”,即变成非贪婪模式的量词:"{m,n}?","{m,}?","??","*?"和"+?"
// ??和{0,1}? 匹配零个o
/zo??/.exec("zooooo"); // ["z", index: 0, input: "zooooo", groups: undefined]
/zo{0,1}?/.exec("zooooo"); // ["z", index: 0, input: "zooooo", groups: undefined]
// *?和{0,} 匹配零个o
/zo*?/.exec("zooooo"); // ["z", index: 0, input: "zooooo", groups: undefined]
/zo{0,}?/.exec("zooooo"); // ["z", index: 0, input: "zooooo", groups: undefined]
// +?和{1,}? 匹配一个o
/zo+?/.exec("zooooo"); // ["zo", index: 0, input: "zooooo", groups: undefined]
/zo{1,}?/.exec("zooooo"); // ["zo", index: 0, input: "zooooo", groups: undefined]
判断匹配模式
判断匹配模式指,某个子表达式后是否存在或不存在某个模式,进而进行匹配
/一起学习(?=RegExp)/.test("一起学习RegExp"); // true
/一起学习(?=RegExp)/.test("一起学习React"); // false
/一起学习(?!RegExp)/.test("一起学习React"); // true
/一起学习(?!RegExp)/.test("一起学习RegExp"); // false