我的任务有一些规则。基本上,我将一个数字分成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/
答案 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>');