Regexp添加了不可见的点字符替换\ b

时间:2015-03-05 15:20:45

标签: javascript regex

我希望这是我的正则表达式:/^word\b/word是动态的)

当我将其设置为动态时,我必须使用它:

var word='spoon';
'spoon .table .chair'.match(new RegExp('^'+word+'\b'));

然而,这会找到null,而这个:

var word='spoon';
'spoon .table .chair'.match(/^spoon\b/);

找到["spoon"]

有趣的是,当我研究正则表达式和正则表达式RegExp写的区别时:

console.log(/^spoon\b/,new RegExp('^'+word+'\b'))

它显示了这个:

/^spoon\b/ /^spoon/

如果我然后将日志输出的第二部分(/^spoon/)复制到我的代码编辑器中,我会看到这个字符:

Looks like a dot.

那是什么?如何使用RegExp word-ending-with,因为当字符串可能是单字符串(勺子或其他单词)时,我并不总是保证最后有空格

我宁愿在没有看不见的东西的情况下这样做

2 个答案:

答案 0 :(得分:4)

您必须通过添加额外的斜杠来逃避正则表达式字符串中\中的b

var regex = new RegExp('^' + word + '\\b')

这是因为RegExp期望看到两个字符\b,但字符串'\b'是一个字符,ascii 8,退格字符(与'\n'是单个换行符的方式相同。

答案 1 :(得分:1)

在Javascript中,\b并不意味着\后跟b。它表示退格字符(ASCII代码8)。要获得\后跟b,您需要转义斜杠,以便Javascript不会将其解析为退格:

'^' + word + '\\b'

如果您想使用\d\s或其他任何内容,同样适用:您需要使用另一个转义\,以便Javascript认为它不是Javascript转义代码和RegExp可以将其解析为您所期望的。