Javascript 将.replace()用于条件组
我有一个正则表达式(如下所示),它完全按照我希望的方式工作,除非我只想在组Javascript 将.replace()用于条件组,javascript,regex,Javascript,Regex,我有一个正则表达式(如下所示),它完全按照我希望的方式工作,除非我只想在组$7存在时插入'x' 有没有一种方法可以使用.replace() phoneNumber.replace(/(\()?(\d{3})(\)?(\d{3})-?(\d{4})(+)(\d+)?/,'($2)$4-$5x$7') 样本输入: 7777 样本输入的输出: (777)777-7777X 更新: 谢谢@Amit Joki的回复 phoneNumber.replace(/(\()?(\d{3})(\))? ?(\d{3
$7
存在时插入'x'
有没有一种方法可以使用.replace()
phoneNumber.replace(/(\()?(\d{3})(\)?(\d{3})-?(\d{4})(+)(\d+)?/,'($2)$4-$5x$7')代码>
样本输入:
7777
样本输入的输出:
(777)777-7777X
更新:
谢谢@Amit Joki的回复
phoneNumber.replace(/(\()?(\d{3})(\))? ?(\d{3})-?(\d{4})([ x]+)?(\d+)?/,
function(m, g1, g2, g3, g4, g5, g6, g7) {
return "(" + g2 + ")" + " " + g4 + "-" + g5 + (g7 ? " x" + g7 : "");
}
);
最后,我用的是:
注意:需要更新regex以包含回调插入的x
phoneNumber.replace(/(\()?(\d{3})(\))? ?(\d{3})-?(\d{4})([ x]+)?(\d+)?/,
function(m, g1, g2, g3, g4, g5, g6, g7) {
return "(" + g2 + ")" + " " + g4 + "-" + g5 + (g7 ? " x" + g7 : "");
}
);
是的,你可以用callback
phoneNumber = phoneNumber.replace(/(\()?(\d{3})(\))? ?(\d{3})-?(\d{4})( +)?(\d+)?/,
function(m, g1, g2, g3, g4, g5,g6,g7) { // matches
return "(" + g2 + ")" + g4 + "-" + g5 + (g7 ? "x" : "");
});
条件部分是g7?“x”:“
这是一个三元运算符,如果g7
存在,则返回“x”
,否则返回空字符串”
提供示例输入和预期输出。已添加示例输入/输出。