正则表达式字符的用途

时间:2015-06-08 21:09:44

标签: regex

我遇到了一个包含?:个字符的正则表达式,例如:

(?:\s*)

所以这将匹配0个或更多空格字符,但我无法找到?:的目的是什么。我知道,如果案例为':?',则:是可选的,但?:是什么?

2 个答案:

答案 0 :(得分:0)

  

(x)匹配'x'并记住匹配,如下例所示   显示。括号称为捕获括号。

     

模式中的'(foo)'和'(bar)'/(foo)(bar)\ 1 \ 2 /匹配和   记住字符串“foo bar foo bar”中的前两个单词。 \ 1   和\ 2在模式中匹配字符串的最后两个单词。注意\ 1,   \ 2,\ n用于正则表达式的匹配部分。在更换   正则表达式的一部分必须使用语法$ 1,$ 2,$ n,例如:'bar   foo'.replace(/(...)(...)/,'$ 2 $ 1')。

     

(?:x)匹配'x'但不记得匹配。括号是   称为非捕获括号,并允许您定义子表达式   使用正则表达式运算符。考虑样本   表达式/(?:foo){1,2} /。如果表达式为/ foo {1,2} /,那么{1,2}   字符只适用于'foo'中的最后一个'o'。随着   非捕获括号,{1,2}适用于整个单词'foo'。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

答案 1 :(得分:0)

这是匹配但不捕获。在正则表达式处理中,( )内的所有内容都被视为可以匹配和捕获的公平游戏。区别在于结果数据。

要使用它,可能需要验证是否存在匹配模式; 但是一个人不希望所有构成匹配的材料

为什么?

假设有一条规则,用户必须将短信添加到电话号码,例如303-555-1234。通过使用匹配但不捕获我们可以要求与破折号匹配,但我们可以提取捕获只是将数字保存到数据库中。

(\d\d\d)(?:-)(\d\d\d)(?:-)(\d\d\d\d)

那么我们需要完全匹配上面的内容,但是当我们提取捕获时,我们只得到数字。

Match 0 : 303-555-1234
Match 1 : 303
Match 2 : 555
Match 3 : 1234

我认为这是一种为匹配提供以使其完整但不需要所有数据的方法。

使用ExplicitCapture选项仅捕获( )内的所有内容时,可以找到类似的内容,但不会在匹配项中留下任何非括号。