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
这似乎让一切变得更好!小时候就像石膏一样。非常感谢,谢谢。