我有一个看起来像这样的正则表达式
/^(?:\w+\s)*(\w+)$*/
什么是?:
?
答案 0 :(得分:25)
它表示子模式是非捕获子模式。这意味着(?:\w+\s)
中匹配的内容,即使它被()
括起来,它也不会出现在匹配列表中,只会(\w+)
。
你仍然在寻找一个特定的模式(在这种情况下,至少有一个单词后面只有一个空白字符),但你并不关心实际匹配的是什么。
答案 1 :(得分:4)
除了提供的优秀答案之外,其用途还在于简化从匹配结果中提取组所需的代码。例如,您的(\ w +)组称为组1,而不必担心在它之前出现的任何组。这可能会提高代码的可维护性。
答案 2 :(得分:3)
表示仅限组,但不记得已分组的部分。
默认情况下(
)
告诉正则表达式引擎记住与其之间的模式匹配的字符串部分。但有时我们只想在不触发正则表达式内存的情况下对模式进行分组,为此我们使用(?:
代替(
答案 3 :(得分:0)
举个例子来理解
简单地说,我们可以说,例如,我得到了一个字符串 say (s="a eeee")。
你的正则表达式(/^(?:\w+\s)(\w+)$/. ) 在这种情况下基本上会做,它将以字符串查找开始'a' 在字符串的开头,注意这里有 'white space character here),在这种情况下,如果你不包括 ?: 它会返回 'a '(a with white space character)。强>
如果你可能不想要这种类型的答案,所以你已经包含了 as*(?:\w+\s)* 它只会返回一个没有空格的 ie.'a' (在这种情况下 ?: 正在与字符串匹配,但它排除了后面的任何内容,这意味着它将匹配字符串但不匹配空格(考虑匹配(数字或字符串)而不是与它们的其他内容。 )
PS:我是正则表达式的初学者。这就是我所理解的?:。请随意指出所解释的错误内容。