将正则表达式重新分解为不包括空组

时间:2016-05-01 23:56:36

标签: javascript jquery regex

嘿所以我有以下脚本有效:

它查找字符串Phone: (##) ### ####

$(function(){

    var regex = /(^|\W)Phone:($|\W)\(?([0-9]{2})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/g;
    var target = $('[data-hook="phone-number"]'); 
    var string = target.html();

    string = string.replace(regex, "><a href=\"tel:$3$5$6\">Phone: ($3) $5 $6</a>");

    target.html(string);
});

但是你可能会注意到它非常粗糙(正则表达式不是我的强项)我想知道有没有办法忽略空组($1$2$4)在这种情况下。

所以我可以在理想世界中使用$1$2$3

此外,我无法弄清楚如何阻止(^|\W)忽略>符号,因此为什么在我的replace中有一个尾随>是否有办法告诉正则表达式转移/删除一个号码?

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找创建非捕获组的(?:)

/(?:^|\W)Phone:(?:$|\W)\(?(?:[0-9]{2})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/g

正如Alan Moore所说,你也可以稍微缩短一下:

/\bPhone:\s*\(?(?:[0-9]{2})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/g