获取匹配 (pattern)
符合括号中pattern所匹配的内容,将会被获取。
const str = 'hello_world'
const p = /hello_(.*)/
const result = str.match(p)
result的结果是:
["hello_world", "world", index: 0, input: "hello_world", groups: undefined]
result的第一个项,是匹配的结果。
result的第二个项,是获取的结果。获取的结果是正则表达式中用括号括起来的部分在匹配结果中实际对应的值。在本例中,就是world。
非获取匹配 (?:pattern)
在看例子之前,我们先来思考一下,“非获取匹配”和“获取匹配”,他们之间可能会有什么样的差别。
好的,我们接下来看一看例子。
const str = 'hello_world';
const p = /(?:hello)_world/
const result = str.match(p);
result的结果是:
["hello_world", index: 0, input: "hello_world", groups: undefined]
虽然正则表达式也有括号,但这次括号中还包含了特殊的内容“?:”。
所以这不是之前将的获取匹配对不对?
那么这叫什么呢?是的,就是非获取匹配。获取匹配的括号中再加个“?:”就变成了非获取匹配,神奇神奇。
好了,那我们一起来理解一下结果——result数组。
第一项,是匹配结果。str中和p匹配的结果就是hello_world。
第二项,是获取结果。咦?为什么是index?这里为什么不是一个字符呢?捕获结果哪里去了呢? 我们要注意了哈,这里没有获取。这个正则表达式用的是非捕获匹配呢。
(?=pattern) 正向肯定预查。
在任何匹配pattern字符串开始处,开始匹配查找字符。
该匹配是一个非获取匹配。
(?!pattern) 正向否定预查
正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配。