使用正则表达式格式化和替换字符串

时间:2017-07-28 13:00:55

标签: javascript regex

我有一个长度至少为7位的数字。 典型示例:000012300001234000012345

我想转换它们以便它们分别成为: 01:2312:3423:45

这意味着用最后4个字符替换整个字符串并在中间放置一个冒号。

我可以使用(\d{4})$获取最后4位数字 我可以通过以下方式获得2个小组:(\d{2})(\d{2})$

使用最后一个选项,在字符串0000123 $ 1:$ 2匹配给我00001:23 在哪里我想要01:23

我像这样替换字符串:

newVal = val.replace(/regex/, '$1:$2');

4 个答案:

答案 0 :(得分:2)

您需要将开头数字与\d*匹配(如果有任何内容,则只需.*):



var val = "0001235";
var newVal = val.replace(/^\d*(\d{2})(\d{2})$/, '$1:$2');
console.log(newVal);




模式详情

  • ^ - 字符串开头
  • \d* - 0+位数(或.*将匹配除换行符之外的任何0 +字符)
  • (\d{2}) - 第1组捕获2位数字
  • (\d{2}) - 第2组捕获2位数字
  • $ - 字符串结束。

答案 1 :(得分:2)

As Alex K. said,无需正则表达式,只需使用substr提取所需的部分:

val = val.substr(-4, 2) + ":" + val.substr(-2);

请注意,当起始索引为负数时,它来自字符串的末尾。

示例:

function update(val) {
  return val.substr(-4, 2) + ":" + val.substr(-2);
}
function test(val) {
  console.log(val + " => " + update(val));
}
test("0000123");
test("0001234");
test("000012345");

答案 2 :(得分:1)

使用此正则表达式:^(\d+?)(\d{2})(\d{2})$



var newVal = "0000123".replace(/^(\d+?)(\d{2})(\d{2})$/, '$2:$3');
console.log(newVal);




答案 3 :(得分:1)

你可以扔掉第一个角色,只替换最后匹配的部分。



console.log('00000001234'.replace(/^(.*)(\d{2})(\d{2})$/, '$2:$3'));