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

例如,假设我们的关键字是 [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 - 字边界问题 (\b),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9603892/

10-09 18:28