【发布时间】:2016-05-06 18:57:43
【问题描述】:
这是我的正则表达式:
new RegExp("\\b" + synonym.toLowerCase() + "\\b", "g").test(modSearchString.toLowerCase())
所以场景是 modSearchString 包含一串字符/单词。它正在检查 modSearchString 是否包含同义词以及它是否会做某事。现在,它运行得非常好。但是,如果同义词包含加号,它似乎不起作用。这些同义词中的大多数没有加号,但有可能会有一些。我怎样才能解释加号?
编辑
我希望 modSearchString 中的短语与传递的同义词完全匹配。因此,如果同义词是“ThisPass+”和modSearchstring = 'Test for ThisPass++",它应该会失败。但是,如果modSearchstring = 'Test for ThisPass+" 应该通过。
如果同义词是“ThisPass”,也应该如此。如果modSearchstring = 'Test for ThisPass" 应该通过,如果modSearchstring = 'Test for ThisPass+" 应该失败。
我拥有的第一个正则表达式在查找包含该同义词的搜索字符串时效果很好。但是,这只适用于单词字符。由于同义词可能包含 + 号,因此它可能无法正常工作。
【问题讨论】:
-
您需要转义加号,在此处查看最佳答案:stackoverflow.com/questions/3561493/…
-
+不是单词字符,所以如果\b\+前面直接有字母/数字/下划线,则匹配,但如果有空格、逗号或任何。如果开头有加号,您可能需要检查\B\+,如果结尾有加号,则可能需要检查\+\B。 -
如果您的意思是
synonym以加号结尾或开头,则不能使用单词边界,请使用(?:^|\W)和(?:$|\W) -
你有例子吗?
-
new RegExp("(?:^|\\W)" + synonym.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "(?:$|\\W)")
标签: javascript regex