我有一个正则表达式来检查字符串是否包含特定单词。它按预期工作:
/\bword\b/.test('a long text with the desired word amongst others'); // true
/\bamong\b/.test('a long text with the desired word amongst others'); // false
但我需要一个即将在变量中检查的词。使用new RegExp
无法正常运行,它始终会返回false
:
var myString = 'a long text with the desired word amongst others';
var myWord = 'word';
new RegExp('\b' + myWord + '\b').test(myString); // false
myWord = "among";
new RegExp('\b' + myWord + '\b').test(myString); // false
这里有什么问题?
答案 0 :(得分:25)
var myWord = 'word';
new RegExp('\\b' + myWord + '\\b')
从字符串构建正则表达式时,需要双倍转义\
。
这是因为\
在字符串文字中开始转义序列,所以它永远不会进入正则表达式。通过执行\\
,您在字符串中包含了一个文字'\'
字符,这使得正则表达式/\bword\b/
。