正则表达式断言语句

javaScript正则表达式经常使用三种语法做一个辨别:

  • ?:
  • ?=
  • ?!

1、?:非猎取婚配

()都是对正则举行分组,然则二者有区分:

  • (?:XXX) 只婚配,但不能猎取括号内的婚配字符
  • () 婚配到并且能猎取括号内的婚配字符
'JavaScript is fun'.replace(/([Jj]ava)(?:[Ss]cript)/,"$2");  // "$2 is fun" 猎取不到第二个括号内婚配的值
'JavaScript is fun'.replace(/([Jj]ava)([Ss]cript)/,"$2");  // 'Script is fun'

2、?= 正向一定预查,非猎取婚配

(?=pattern) 在任何婚配pattern的字符串最先处婚配查找字符串,不斲丧字符,相当于一种润饰。

?=?:的区分,能够从下面例子中看处置惩罚:

"JavaScript is fun".replace(/([Jj]ava)(?:[Ss]cript)/,"$1");  // "Java is fun"  
"JavaScript is fun".replace(/([Jj]ava)(?=[Ss]cript)/,"$1");  // "JavaScript is fun"

浅显点说:

?= 只是一个
润饰,它不是主体,然则不相符这个润饰的不要,相符的也只是婚配到了须要润饰的主体部份。

?: 他是一个主体,然则不能猎取

3、?! 正向否认预查,非猎取婚配

不相符parttern的就婚配胜利,这个和(?=parttern)恰好相反。

'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"
    原文作者:listenWind
    原文地址: https://segmentfault.com/a/1190000014288022
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞