【问题标题】:RegEx: Adding plus sign to word boundary正则表达式:在单词边界添加加号
【发布时间】: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


【解决方案1】:

看来你需要

new RegExp("(?:^|\\s)" + synonym + "(?=\\s|$)")

regex demo 可以在这里查看。

第一组(?:^|\s) 只匹配字符串的开头 (^) 或空格 (\s),后面的前瞻将只检查(不会消耗,因为它是零宽度断言)如果有空格或字符串结尾 ($)。

【讨论】:

  • 这也没有考虑任何标点符号,但不难添加
  • @KerryJones 不幸的是,OP 在这里只需要空白边界,标题仍未编辑。
【解决方案2】:

如果您只需要检查一个字符串是否包含另一个字符串,您可以这样做:

var modSearchString = "foo bar";
var synonym = "bar";

if(modSearchString.indexOf(synonym) > -1){
    //modSearchString contains synonym
}else{
    //modSearchString does not contain synonym
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2011-03-28
    • 2014-06-07
    • 2012-09-24
    相关资源
    最近更新 更多