我有一系列关键字,我想知道在一些已提交的字符串中是否找到至少一个关键字。我进一步想要确保它是匹配的关键字,而不是与单词非常相似的东西。
比如说,我们的关键字是[English, Eng, En]
,因为我们正在寻找一些英语变体。
现在,假设用户的输入是i h8 eng class
,或同样具有挑衅性和文盲的内容 - 那么eng
应该匹配。它也应该无法匹配england
之类的单词或某些奇怪的chen
,即使它有en
位。
所以,在我无限缺乏智慧的情况下,我相信我可以按照这一点做一些事情,以便将我的一个数组项与输入相匹配:
.match(RegExp('\b('+array.join('|')+')\b','i'))
认为正则表达式会从数组中查找匹配项,现在显示为(English|Eng|En)
,然后查看两边是否有零宽度的单词边界。
答案 0 :(得分:5)
你需要加倍反斜杠。
使用RegExp()
构造函数创建正则表达式时,您将传入一个字符串。 JavaScript字符串常量语法也将反斜杠视为元字符,用于引用引号等。因此,在<{strong> RegExp()
代码之前,反斜杠将被有效地删除甚至还跑!
通过加倍它们,解析字符串的步骤将留下一个反斜杠。然后RegExp()
解析器将在“b”之前看到单个反斜杠并做正确的事。
答案 1 :(得分:3)
您需要在JavaScript字符串中加倍反斜杠,或者编码 Backspace 字符:
.match(RegExp('\\b('+array.join('|')+')\\b','i'))
答案 2 :(得分:1)
您需要双重转义\b
,因为它在字符串中具有特殊值:
.match(RegExp('\\b('+array.join('|')+')\\b','i'))
答案 3 :(得分:1)
\b
是字符串文字内的转义序列(参见this page上的表2.1)。你应该通过添加一个额外的斜杠来逃避它:
.match(RegExp('\\b('+array.join('|')+')\\b','i'))
在正则表达式文字中使用时,您无需转义\b
:
/\b(english|eng|en)\b/i