正则表达式断言语句

一、?: 非获取匹配

(?: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"
相关文章
相关标签/搜索