2012-03-07 69 views
3

我有一个关键字的数组,我想知道是否关键字中的至少一个是一些已提交字符串内找到。我进一步想要确保它是匹配的关键字,而不是与该词非常相似的关键词。麻烦与字边界( B)

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

现在,说是从用户输入的是i h8 eng class,或一些其他类似的挑衅和文盲 - 然后eng亦宜。还应不匹配像england一个单词或一些奇怪的事情chen,即使它得到了en位。

所以,在我的无限缺乏智慧我相信我能做到沿此线的东西,以配合我与输入数组项:

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

随着思维的正则表达式将寻求从阵列中,现在提出像(English|Eng|En)比赛,然后看看,看看是否有任何一方零宽度字界限。

+1

+1让我笑 – cambraca 2012-03-07 15:08:04

回答

5

您需要反斜线。

当你创建一个RegExp()构造一个正则表达式,你传递一个字符串。 JavaScript字符串常量语法将反斜杠视为元字符,用于引用引号等。因此,反斜杠将被有效剥离出来之前代码甚至运行了!

通过加倍他们,解析字符串的步骤将留下一个反斜杠。然后RegExp()解析器会看到之前的“B”的单反斜线和做正确的事。

+0

这似乎让一切都应该通过增加一个额外的斜杠转义更好!小时候就像石膏一样。非常感谢,谢谢。 – tesc 2012-03-07 15:17:12

3

您需要在JavaScript字符串中的反斜杠,否则你会编码退格字符:

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

您需要双击逃脱\b,因为它在字符串中的特殊价值:

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

\b是字符串(参见上表this page 2.1)内的转义序列。

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

正则表达式文本中使用时,你不需要逃避\b

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