2

我正在尝试用 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');
});

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

4

3 回答 3

8

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

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');
于 2013-06-25T16:27:34.977 回答
2

描述

如果您已经确定该值是电话号码,那么您可以使用此表达式,它允许任何部分之间的任何非数字分隔符,甚至根本没有分隔符

正则表达式:^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})

用。。。来代替:($1)-$2-$3

在此处输入图像描述

要匹配特定数字的所有实例,您可以使用以下命令:

^\D?(888)\D?\D?(888)\D?(8888)和相同的替换($1)-$2-$3

Javascript 示例

输入样本

0001112222
188-818-8818
288-828-8828
(388)-838-8838
(488) 848-8848

代码

<script type="text/javascript">
  var re = /^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})/;
  var sourcestring = "source string to match with pattern";
  var replacementpattern = "($1)-$2-$3";
  var result = sourcestring.replace(re, replacementpattern);
  alert("result = " + result);
</script>

更换后

(000)-111-2222
(188)-818-8818
(288)-828-8828
(388)-838-8838
(488)-848-8848
于 2013-06-25T17:38:35.383 回答
0

您可以使用正则表达式:

$("p").each(function() {
    var rep = $(this).text();
    rep = rep.replace(/\(?([0-9]{3})\)?[- ]([0-9]{3})[- ]([0-9]{4})/, '($1)-$2-$3');
    $(this).text(rep);
});

http://jsfiddle.net/hhGgQ/2/

于 2013-06-25T16:28:23.863 回答