了解匹配多个字符串的正则表达式中\ b的用法

时间:2017-04-09 20:17:02

标签: javascript regex

我在浏览时刚刚在线找到了以下正则表达式:

(?:^|\b)(bitcoin atm|new text|bitcoin|test a|test)(?!\w)

我很想知道在这里使用(?:^|\b)有什么好处?

我明白基本上(?:)意味着它是一个非捕获组但我在这个特殊的括号中被^|\b感到有点难过,在这里我理解^基本上意味着字符串的资产开始。

\b上的\b示例让我对QFileDialog d(this); d.setFileMode(QFileDialog::Directory); d.setNameFilter("*.mp3"); if (d.exec()) qDebug () << d.selectedFiles(); 的作用有了一个公平的理解,但我仍然无法根据我提供的示例将内容置于上下文中。

1 个答案:

答案 0 :(得分:2)

(?:^|\b)是一个非捕获组,包含2个备选方案,这两个备选方案都是零宽度断言。这意味着,它们只匹配字符串中的位置,因此不会影响您在匹配中获得的文本

此外,当下一个子模式匹配bnt作为第一个字符(字符)时\b(第一个非捕获组中的单词边界也将在字符串的开头匹配它们,使^(字符串锚的开始)替代分支冗余在这里。

因此,您可以安全地使用

\b(bitcoin atm|new text|bitcoin|test a|test)(?!\w)

甚至

\b(bitcoin atm|new text|bitcoin|test a|test)\b

因为替代品以字符char结尾。

如果(bitcoin atm|new text|bitcoin|test a|test)组中的备选项是用户定义的,动态的,并且可以使用非单词字符开头或结尾,那么(?:^|\b)(?!\w)正则表达式模式是有意义的,但它不会是绝对的,因为(?:^|\b)\.txt(?!\w)不会将.txt作为整个单词匹配,所以它应该在单词char之后。我会使用(?:^|\W)而不是(?:^|\b)