Javascript正则表达式搜索/替换正在跳过匹配

时间:2013-03-25 22:19:12

标签: javascript regex

我在FF和Chrome中尝试了以下内容

' 1 2 3 4 5 6 '.replace(/([\s()])(\d+)([\s()])/g, '$1[num $2]$3');

我期待的结果:

" [num 1] [num 2] [num 3] [num 4] [num 5] [num 6] "

我得到的结果(两个浏览器):

" [num 1] 2 [num 3] 4 [num 5] 6 "

即使简化也会得到相同的结果:

' 1 2 3 4 5 6 '.replace(/\s(\d+)\s/g, ' [num $1] ');

任何想法会发生什么?

3 个答案:

答案 0 :(得分:1)

是的,您的\s消耗了字符。正则表达式多个匹配向前运行以防止无限循环。所以在第一场比赛之后你已经在2之前,但是没有空位可以匹配,所以它忽略了它。

您要做的是使用前瞻使您的匹配消耗殆尽,或者使用\b这是字边界的零宽度匹配。

' 1 2 3 4 5 6 '.replace(/([\s()])(\d+)(?=[\s()])/g, '$1[num $2]')

这应该适合你。

答案 1 :(得分:1)

从评论中移出答案+添加了积极的前瞻:

' 1 2 3 4 5 6 '.replace(/(\s)(\d+)(?=\s)/g, '$1[num $2]');

答案 2 :(得分:0)

试试这个:

' 1 2 3 4 5 6 '.replace(/(\d+)/g, '[num $1]');
相关问题