TypeScript字符串替换为正则表达式,组和部分字符串

时间:2017-08-15 18:51:48

标签: regex typescript replace

我想在输入时使用正则表达式来格式化输入中的数字。
我的问题是:由于我使用组格式化数字,它只在字符串与正则表达式匹配时才格式化。 这是一个例子:
完整的数字是:12312312312 |格式化为:123.123.123-12

例如,如果我输入1231231,它就不会像我期望的那样格式化为123.123.1,只有当我键入整个数字时才会这样。

这是我的功能:

format(value){
    // This function returns the formatted string on user input
    return value.replace(/(\d{3})(\d{3})(\d{3})(\d+)/, "\$1.\$2.\$3-\$4");
}

有没有办法让其余的组选项?

2 个答案:

答案 0 :(得分:9)

您可以使用

执行此操作

function formatStr(str){
  str = str.replace(/(\d{1,3})(\d{0,3})(\d{0,3})(\d{0,2})/g, function(a, b, c, d, e){
        let ret = "";
        if(b != "")
            ret = b;
        if(c != "")
            ret = ret+"." + c;
        if(d != "")
            ret = ret+"." + d;
        if(e != "")
            ret = ret+"-" + e;
        return ret;
  })
  console.log(str);
}

formatStr('12312312312');
formatStr('1231231');

答案 1 :(得分:0)

您可以使用此format功能对.replace进行2次调用:

  1. 首先我们在每3位数后插入一个点
  2. 其次我们用连字符替换第3个点
  3. <强>代码:

    function format(value) {
        // This function returns the formatted string on user input
        return value.replace(/(\d{3})/g, '$1.')
                    .replace(/((?:\d{3}\.){2}\d{3})\./, '$1-');
    }
    
    console.log(format('1231231'));  //=> 123.123.1
    console.log(format('12312312312')); //=> 123.123.123-12