我正在尝试使用javascript替换html文档中特定电话号码的所有实例。
电话号码可能有多种形式:
888-888-8888
(888)-888-8888
(888)888-8888
$(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');
});
它成功替换了列出的第一个表单的所有实例。但似乎忽略了括号。我试过用反斜杠逃避没有运气。我的正则表达能力不是很好,所以我真的很感激一些帮助。
答案 0 :(得分: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');
答案 1 :(得分:2)
如果您已经确定该值是电话号码,那么您可以使用此表达式,该表达式允许任何部分之间的任何非数字分隔符,甚至根本不允许分隔符
正则表达式:^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})
替换为:($1)-$2-$3
要匹配特定号码的所有实例,您可以使用:
^\D?(888)\D?\D?(888)\D?(8888)
和相同的替换($1)-$2-$3
。
输入样本
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
答案 2 :(得分: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);
});