所以我知道\bBlah\b 会匹配整个 Blah,但它也会匹配“Blah.jpg”中的 Blah,我不想这样。我只想匹配两边都有空格的整个单词。
最佳答案
你可以试试:\sBlah\s
。
或者,如果您允许开始和结束 anchor ,(^|\s)Blah(\s|$)
这将匹配 "Blah"
本身,或 "Blah and Blah"
Blah
另见
- regular-expressions.info/Character classes和 Anchors
\s
代表“空白字符”。- 插入符
^
匹配字符串中第一个字符之前的位置 - 类似地,
$
匹配紧跟在字符串中的最后一个字符之后
前瞻变体
如果你想匹配 "Blah Blah"
中的两个 Blah
,那么由于一个空格在两次出现之间是“共享的”,你必须使用断言。像这样的东西:
(^|\s)Blah(?=\s|$)
另见
仅捕获Blah
上面的正则表达式也会匹配前导空格。
如果您只想要 Blah
,理想情况下,lookbehind 会很好:
(?<=^|\s)Blah(?=\s|$)
但由于 Javascript 不支持它,您可以改写:
(?:^|\s)(Blah)(?=\s|$)
现在 Blah
将被捕获到 \1
中,没有前导空格。
另见
关于Javascript 正则表达式仅匹配整个单词,仅由空格绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951915/