正则表达式断言语句
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"
相关推荐
shqhope 2020-06-23
wangzhaotongalex 2020-10-20
wyq 2020-11-11
TLROJE 2020-10-26
风雨断肠人 2020-10-13
duanqingfeng 2020-09-29
rechanel 2020-11-16
cshanzhizi 2020-10-16
luofuIT成长记录 2020-09-22
phphub 2020-09-10
taomengxing 2020-09-07
MaggieRose 2020-08-19
flyingssky 2020-08-18
山水沐光 2020-08-18
jyj00 2020-08-15
AHuqihua 2020-08-09
山水沐光 2020-08-03