?:
非获取匹配(?:x)
匹配x可是不会捕获,不会 $n
获取到(与()
有区别),可是能够被替换code
(?:x)
只匹配,不获取()
能够匹配,也能够被获取'JavaScript is fun'.replace(/([Jj]ava)(?:[Ss]cript)/,"$2"); // "$2 is fun" 获取不到第二个括号内匹配的值 'JavaScript is fun'.replace(/([Jj]ava)([Ss]cript)/,"$2"); // 'Script is fun'
?=
和 ?!
x(?=y)
只有当 x 后面紧跟着 y 时,才匹配 xx(?!y)
只有当 x 后面不紧跟着 y 时,才匹配 x类似点:二者都不是匹配结果的一部分,既不会被替换掉( 和?:
区别),也不能够被$n
获取到( 和?:
同样)
// ?= 和 ?! 区别 'a.jpg,a.png,a.gif,a.jpg'.replace(/a(?!\.jpg)/g, '*'); // "a.jpg,*.png,*.gif,a.jpg" 'a.jpg,a.png,a.gif,a.jpg'.replace(/a(?=\.jpg)/g, '*'); // "*.jpg,a.png,a.gif,*.jpg" // ?: 和 ?= 区别 "JavaScript is fun".replace(/([Jj]ava)(?:[Ss]cript)/,"$1"); // "Java is fun" "JavaScript is fun".replace(/([Jj]ava)(?=[Ss]cript)/,"$1"); // "JavaScript is fun"