我有一个正则表达式来转义搜索字符串中的所有特殊字符。这很好用,但我似乎无法使用单词边界。例如,使用haystack
add +
或
add (+)
和针
+
正则表达式/\+/gi
与“+”匹配。但是正则表达式/\b\+/gi
没有。关于如何使这项工作的任何想法?
使用
add (plus)
作为干草堆,/\bplus/gi
作为正则表达式,它匹配得很好。我无法弄清楚为什么逃脱的角色有问题。
答案 0 :(得分:5)
\b
是一个零宽度断言:它不消耗任何字符,只是声明某个条件在给定位置成立。单词边界断言位置前面有一个单词字符,后面没有一个单词,或后跟一个单词字符,前面没有一个字符。 (“单词字符”是字母,数字或下划线。)在您的字符串中:
add +
...开头有一个单词边界,因为a
前面没有单词字符,并且在第二个d
之后有一个单词边界,因为它后面没有单词字符。正则表达式中的\b
(/\b\+/
)正在尝试在空格和+
之间进行匹配,这不起作用,因为这些都不是单词字符。
答案 1 :(得分:1)
尝试将其更改为:
/\b\s?+/gi
编辑:
根据需要扩展此概念。如果你想要任何单词边界之后的第一个+:
/\b[^+]*+/gi
答案 2 :(得分:1)
边界是非常有条件的断言;他们锚定的东西取决于他们触摸的东西。有关详细说明,请参阅this answer,以及您可以采取的其他措施。