javascript正则表达式条件数字格式

Don*_*ots 2 javascript regex

我的任务有一些规则.基本上,我将一个数字分成3组.如果最后一组只有1位数,那么最后2组有2位数而不是1组3和1组1.

例如:

123456789 = 123-456-789
12345678901 = 123-456-789-01
1234567 = 123-45-67
Run Code Online (Sandbox Code Playgroud)

到目前为止我的正则表达式是:

serial.match(/\d{3}|\d+/g)
Run Code Online (Sandbox Code Playgroud)

其中serial是通过函数传入的字符串

function format(serial) {
    return serial.replace('/-|/s/g', '').match(/\d{3}|\d+/g).join('-');
}
Run Code Online (Sandbox Code Playgroud)

这让我大部分都在那里,只是在最后一场比赛为{4}时没有正确分割.

我通过小提琴的进步:https://jsfiddle.net/dboots/2mu0yp2b/2/

Nin*_*olz 6

您可以使用前瞻性的正则表达式.

正向前查找查找等号后的图案,但不包括其在比赛中.

X(ω= Y)

仅当'x'后跟'y'时才匹配'x'.这称为前瞻.

例如,/Jack(?=Sprat)/只有在跟随'Sprat'后才匹配'Jack'./Jack(?=Sprat|Frost)/只有在跟随'Sprat'或'Frost'时才匹配'Jack'.但是,'Sprat'和'Frost'都不是比赛结果的一部分.

function format(s) {
    return s.toString().replace(/\d{2,3}(?=..)/g, '$&-');
}

document.write(format(123456789) + '<br>');
document.write(format(12345678901) + '<br>');
document.write(format(1234567) + '<br>');
Run Code Online (Sandbox Code Playgroud)