2

HTML ドキュメント内の特定の電話番号のすべてのインスタンスを JavaScript に置き換えようとしています。

電話番号には複数の形式があります。

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');

もう 1 つの方法は、単一のパターンを使用することです。

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 に答える