任何人都可以告诉我为什么这个Regexp不匹配?
var matches = ' @test'.match(new RegExp('(\s+|^)(@|!)(.*?)(\s+|$)', 'g'));
而这个匹配:
var matches = '@test'.match(new RegExp('(\s+|^)(@|!)(.*?)(\s+|$)', 'g'));
我已经指定了\s+
。为什么它不匹配呢?
答案 0 :(得分:4)
\s
不被识别为空白速记,因为你是从字符串而不是正则表达式文字构造正则表达式,而在字符串中你需要加倍反斜杠。
所以你需要使用
var matches = ' @test'.match(new RegExp('(\\s+|^)([@!])(.*?)(\\s+|$)', 'g'));
或
var matches = ' @test'.match(/(\s+|^)([@!])(.*?)(\s+|$)/g);