我希望这是我的正则表达式:/^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/
)复制到我的代码编辑器中,我会看到这个字符:
那是什么?如何使用RegExp word-ending-with,因为当字符串可能是单字符串(勺子或其他单词)时,我并不总是保证最后有空格
我宁愿在没有看不见的东西的情况下这样做
答案 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可以将其解析为您所期望的。