正則表達式斷言語句

一、?: 非獲取匹配

(?: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 時,才匹配 x
  • x(?!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"
相關文章
相關標籤/搜索