?:
非獲取匹配(?: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"