我有这个正则表达式:
(/(\d{2})(\d{3})(\d{2})/g;
我想要做的是在打字时更换每2个,每3个和每2个字符替换一次“”。这意味着如果我键入“123”,它应格式化为“12 3”,如果我键入“12345”,则应格式化为“12 123”
但是我每隔7个字符就会得到一个间距。 这是一个jsfiddle:http://jsfiddle.net/K4WXc/257/
帮助将受到高度赞赏!
答案 0 :(得分:1)
我修改了您的fiddle,如下所示:
return v.replace(/^(\d{2})(\d{1,3})(\d{0,2}).*/, function (match, a, b, c) {
return a + ' ' + b + (c == '' ? '' : ' ' + c);
});
请记住,在此块之前,您已删除任何非数字,此块只需要数字(无空格)。
它在开头匹配2位数:^(\d{2})
然后1到3作为下一个捕获组:(\d{1,3})
如果第二组中有3个,则最多可以捕获2个:(\d{0,2})
除此之外的任何内容都将被丢弃:.*
这一点的重要部分使它能够在您键入时匹配“不完整”条目,即使您没有键入第二组的所有3位数或第三组的两个数字,它也会匹配。
注意:原始替换的主要问题是缺少代表整个匹配字符串的第一个参数。