1

谁能告诉我为什么这个正则表达式不匹配?

var matches = ' @test'.match(new RegExp('(\s+|^)(@|!)(.*?)(\s+|$)', 'g'));

而这个匹配:

var matches = '@test'.match(new RegExp('(\s+|^)(@|!)(.*?)(\s+|$)', 'g'));

我已经指定了\s+。那为什么不匹配呢?

4

1 回答 1

5

\s不被识别为空格速记,因为您是从字符串而不是正则表达式文字构造正则表达式,并且在字符串内您需要将反斜杠加倍。

所以你需要使用

var matches = ' @test'.match(new RegExp('(\\s+|^)([@!])(.*?)(\\s+|$)', 'g'));

或者

var matches = ' @test'.match(/(\s+|^)([@!])(.*?)(\s+|$)/g);
于 2012-09-29T08:47:24.973 回答