我有一个长度至少为7位的数字。
典型示例:0000123
,00001234
,000012345
我想转换它们以便它们分别成为:
01:23
,12:34
,23:45
这意味着用最后4个字符替换整个字符串并在中间放置一个冒号。
我可以使用(\d{4})$
获取最后4位数字
我可以通过以下方式获得2个小组:(\d{2})(\d{2})$
使用最后一个选项,在字符串0000123
$ 1:$ 2匹配给我00001:23
在哪里我想要01:23
我像这样替换字符串:
newVal = val.replace(/regex/, '$1:$2');
答案 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'));