问题:正则表达式中 (?:pattern)的含义
在看jQuery源码的时候,碰到”/^(?:\s(<[\w\W]+>)[^>]|#([\w-]*))$/“这个正则表达式,对其中的(?:pattern)不太明白。
解决方法
官网解释如下:
(?:x):
匹配 ‘x’ 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/。如果表达式是 /foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词。
?:是非捕获元之一.(?:)代表不捕获分组。比较(X)和(?:X),前者是捕获分组,后者不捕获,区别在于正则表达式匹配输入字符串之后所获得的匹配的(数)组当中没有(?:X)匹配的部分;
分析下这个正则表达式的作用:
另外还有两种非捕获元是 ?= 和 ?!.
x(?=y):
匹配’x’仅仅当’x’后面跟着’y’.这种叫做正向肯定查找。
例如,/Jack(?=Sprat)/会匹配到’Jack’仅仅当它后面跟着’Sprat’。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着’Sprat’或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。x(?!y):
匹配’x’仅仅当’x’后面不跟着’y’,这个叫做正向否定查找。
例如,/\d+(?!.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!.)/.exec(“3.141”)匹配‘141’但是不是‘3.141’