字边界问题(\ b)

时间:2012-03-07 15:05:20

标签: javascript regex

我有一系列关键字,我想知道在一些已提交的字符串中是否找到至少一个关键字。我进一步想要确保它是匹配的关键字,而不是与单词非常相似的东西。

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

现在,假设用户的输入是i h8 eng class,或同样具有挑衅性和文盲的内容 - 那么eng应该匹配。它也应该无法匹配england之类的单词或某些奇怪的chen,即使它有en位。

所以,在我无限缺乏智慧的情况下,我相信我可以按照这一点做一些事情,以便将我的一个数组项与输入相匹配:

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

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

4 个答案:

答案 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