Javascript 单词边界有问题(\b)

Javascript 单词边界有问题(\b),javascript,regex,Javascript,Regex,我有一个关键字数组,我想知道在提交的字符串中是否至少找到一个关键字。我还想绝对确定匹配的是关键词,而不是与单词非常相似的东西 比如说,我们的关键词是[English,Eng,En],因为我们在寻找英语的一些变体 现在,假设用户的输入是i h8 eng class,或者是同样具有挑衅性且不识字的东西-那么应该匹配eng。它也应该不能匹配像england或一些奇怪的东西chen,即使它有en位 因此,在我极度缺乏智慧的情况下,我相信我可以做一些类似的事情,以便将我的一个数组项与输入匹配: .matc

我有一个关键字数组,我想知道在提交的字符串中是否至少找到一个关键字。我还想绝对确定匹配的是关键词,而不是与单词非常相似的东西

比如说,我们的关键词是
[English,Eng,En]
,因为我们在寻找英语的一些变体

现在,假设用户的输入是
i h8 eng class
,或者是同样具有挑衅性且不识字的东西-那么应该匹配
eng
。它也应该不能匹配像
england
或一些奇怪的东西
chen
,即使它有
en

因此,在我极度缺乏智慧的情况下,我相信我可以做一些类似的事情,以便将我的一个数组项与输入匹配:

.match(RegExp('\b('+array.join('|')+')\b','i'))

考虑到正则表达式将从数组中查找匹配项,现在以
(English | Eng | En)
的形式显示,然后查看两边是否有零宽度的单词边界。

需要将反斜杠加倍

使用
RegExp()
构造函数创建正则表达式时,传递的是字符串。JavaScript字符串常量语法也将反斜杠视为元字符,用于引用引号等。因此,在
RegExp()
代码运行之前,反斜杠将被有效地去除


通过将它们加倍,解析字符串的步骤将留下一个反斜杠。然后,
RegExp()
解析器将在“b”之前看到一个反斜杠,并执行正确的操作。

您需要将JavaScript字符串中的反斜杠加倍,或者将反斜杠编码为:

.match(RegExp('\\b('+array.join('|')+')\\b','i'))

您需要双转义a
\b
,因为它在字符串中有特殊值:

.match(RegExp('\\b('+array.join('|')+')\\b','i'))

\b
是字符串文本内部的转义序列(请参见上的表2.1)。您应该通过添加一个额外的斜杠来转义它:

.match(RegExp('\\b('+array.join('|')+')\\b','i'))
在正则表达式文本中使用时,不需要转义
\b

/\b(english|eng|en)\b/i

这似乎让一切变得更好!小时候就像石膏一样。非常感谢,谢谢。