有人可以告诉我为什么这个Regexp不匹配吗?

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


而与此匹配:

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


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

最佳答案

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

所以你需要使用

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


要么

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

关于javascript - Regexp为什么不匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12651277/

10-17 02:57