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

时间:2016-04-08 11:54:56

标签: javascript regex

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

例如:

123456789 = 123-456-789
12345678901 = 123-456-789-01
1234567 = 123-45-67

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

serial.match(/\d{3}|\d+/g)

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

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

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

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

1 个答案:

答案 0 :(得分:6)

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

Positive Lookahead在等号后面查找模式,但不会在匹配中包含它。

  

<强> 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>');