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”
,否则返回空字符串


提供示例输入和预期输出。已添加示例输入/输出。