我正在尝试用javascript替换html文档中特定电话号码的所有实例。

电话号码可能有多种形式:

888-888-8888

(888)-888-8888

(888)888-8888

http://jsfiddle.net/2ARgD/2/

$(document).ready(function(){
    function p(a,b,element){
        if(!element)element=document.body;
        var nodes=$(element).contents().each(function(){
                if(this.nodeType==Node.TEXT_NODE){
                    var r=new RegExp(a,'gi');
                          this.textContent=this.textContent.replace(r,b);
                } else {
                    p(a,b,this);
                }
        });
    }
    p('888-888-8888','(999)-999-9999');
    p('(888)-888-8888','(999)-999-9999');
    p('(888) 888-8888','(999)-999-9999');
});

它成功替换了列出的第一个表单的所有实例。但是似乎忽略了括号。我尝试用反斜杠转义,但没有运气。我的正则表达式技能不是很好,因此我非常感谢您的帮助。

最佳答案

因为要传递字符串以创建正则表达式,所以需要对括号进行转义:

p('888-888-8888','(999)-999-9999');
p('\\(888\\)-888-8888','(999)-999-9999');
p('\\(888\\) 888-8888','(999)-999-9999');

另一种方法是使用单个模式:
p('(888-|\\(888\\)[- ])888-8888','(999)-999-9999');

09-25 20:10