我有一个正则表达式看起来像这样
/^(?:\w+\s)*(\w+)$*/
什么是?:
操作符?
我有一个正则表达式看起来像这样
/^(?:\w+\s)*(\w+)$*/
什么是?:
操作符?
这表示子模式是非捕获子模式。这意味着无论在(?:\w+\s)
中匹配到什么,即使它被括在()
中,它也不会出现在匹配列表中,只有(\w+)
会出现。
你仍然在寻找一个特定的模式(在这种情况下,至少跟随一个单词的单个空格字符),但你并不关心实际匹配到的内容。
这意味着只进行分组但不记住已分组的部分。
默认情况下,(
)
向正则表达式引擎表示要记住与其匹配的字符串部分。但是有时我们只想对一个模式进行分组而不触发正则表达式引擎的记忆功能,为此我们使用 (?:
替换 (
除了提供的优秀答案外,它的用处还在于简化从匹配结果中提取组所需的代码。例如,您的(\w+)
组被称为第1组,无需关心出现在它之前的任何组。这可能会提高您代码的可维护性。