条件括号子串与匹配

时间:2015-05-06 22:20:24

标签: javascript regex

使用正则表达式电话号码格式化解决方案,我希望包含用户输入扩展程序的可能性。

例如,如果用户输入与+121255512341212类似的内容,则其输入的格式为+1 (212) 555-1234 ext 1212,具体如下

但是,如果用户输入的号码没有扩展名(例如+12125551234),则输出仍包含ext

var reg = /(\+?\d{1})?\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})?\W*\s*(\d+)?/g; 
var substr = '$1 ($2) $3-$4 ext $5'; 

'+121255512341212'.replace(reg, substr); // '+1 (212) 555-1234 ext 1212'
'+12125551234'.replace(reg, substr); // '+1 (212) 555-1234 ext'

上面的代码段中的现有问题除外....有没有办法可以在substr中构建条件,以便ext仅在$5具有实际内容时输出?

或者我是以错误的方式解决这个问题......?

1 个答案:

答案 0 :(得分:2)

另外一个替代品可以解决问题:

.replace(reg, substr).replace(/ ext $/, "");