正则表达式中的?:是什么意思?
本文介绍了正则表达式中的?:是什么意思?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
正则表达式中的?:是什么意思?
http://www.runoob.com/regexp/...
上面的网址有解释,还是不明白。能否举个例子详细的解释下这个符号的含义及用处?
解决方案
简单来说,(?:)
就是为了分组,但是不捕获下来供正则表达式其他部分使用,就是说不能使用\1
,\2
这种捕获的子模式。
举个例子
var pattern1=/aacdaa/;
var pattern2=/(?:aa|bb)cd\1/;
var pattern3=/(aa|bb)cd\1/;
var str="aacdaa";
console.log(str.match(pattern1)); // ["aacdaa", index: 0, input: "aacdaa"]
console.log(str.match(pattern2)); // null
console.log(str.match(pattern3)); // ["aacdaa", "aa", index: 0, input: "aacdaa"]
第一个匹配到了,没问题,普通的匹配
第二个就没匹配到,因为\1
在这里无法识别,是非获取匹配
第三个就匹配到了,因为()
是获取性匹配,看后面的输出 数组中第二项是aa,匹配了这个子模式,可以供后续使用,后面的\1
就是匹配到的子模式aa。
所以说(?:)的作用就是为了分组,它和()的区别在上面这个例子中已经表现出来了,至于它和普通模式的区别,就体现在分组的便利上。
上面的例子改一下:
var pattern4=/aacd|bbcd/;
var pattern5=/(?:aa|bb)cd/;
两种写法是一样的匹配模式,但是用了分组之后,简洁了不少,这就是非获取匹配的最常用的作用
这篇关于正则表达式中的?:是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文