什么?:在正则表达式中做

Bim*_*mmy 20 regex

我有一个看起来像这样的正则表达式

/^(?:\w+\s)*(\w+)$*/
Run Code Online (Sandbox Code Playgroud)

什么是?:

Bol*_*ock 27

它表示子模式是非捕获子模式.这意味着匹配的内容(?:\w+\s),即使它被()它包围也不会出现在匹配列表中,只会(\w+).

你仍然在寻找一个特定的模式(在这种情况下,至少有一个单词后面只有一个空白字符),但你并不关心实际匹配的是什么.


cod*_*ict 9

这意味着只分组但不记得分组的部分。

默认情况下( ),正则表达式引擎会记住字符串中与其之间的模式匹配的部分。但有时我们只想在不触发正则表达式内存的情况下对模式进行分组,为此我们使用(?: 代替(

  • 它仍然让我感到困惑......你能提供一些简单的例子吗? (3认同)

Chr*_*unt 7

除了提供的出色答案之外,它还有助于简化从匹配结果中提取组所需的代码。例如,您的(\w+)组被称为组 1,而不必关心出现在它之前的任何组。这可能会提高代码的可维护性。