在输入字段中键入时使用正则表达式替换

时间:2016-08-02 12:25:29

标签: javascript regex

我有这个正则表达式:

(/(\d{2})(\d{3})(\d{2})/g;

我想要做的是在打字时更换每2个,每3个和每2个字符替换一次“”。这意味着如果我键入“123”,它应格式化为“12 3”,如果我键入“12345”,则应格式化为“12 123”

但是我每隔7个字符就会得到一个间距。 这是一个jsfiddle:http://jsfiddle.net/K4WXc/257/

帮助将受到高度赞赏!

1 个答案:

答案 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位数或第三组的两个数字,它也会匹配。

注意:原始替换的主要问题是缺少代表整个匹配字符串的第一个参数。