我有这个正则表达式:
(/(\d{2})(\d{3})(\d{2})/g;
我想要做的是在键入时用“”替换每 2 个、每 3 个和每 2 个字符。这意味着如果我输入“123”,它应该被格式化为“12 3”,如果我输入“12345”,它应该被格式化为“12 123”
但是,我只在每 7 个字符后得到一个间距。 这是一个 jsfiddle:http://jsfiddle.net/K4WXc/257/
非常感谢您的帮助!
最佳答案
我修改了你的fiddle如下图:
return v.replace(/^(\d{2})(\d{1,3})(\d{0,2}).*/, function (match, a, b, c) {
return a + ' ' + b + (c == '' ? '' : ' ' + c);
});
请记住,就在这个 block 之前,您已经删除了所有非数字,这个 block 只需要数字(没有空格)。
匹配2位开头的数字:^(\d{2})
然后1到3作为下一个捕获组:(\d{1,3})
如果第二组中有 3 个,它会再捕获最多 2 个:(\d{0,2})
除此之外的任何内容都将被丢弃:.*
使它能够在您键入时匹配“不完整”条目的重要部分是,即使您没有键入第 2 组或第 3 组的所有 3 个数字,它也会匹配。
注意:原始替换的主要问题是缺少代表整个匹配字符串的第一个参数。
关于javascript - 在输入字段中键入时使用正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38720381/