JavaScript replace new RegExp使用紹介
4409 ワード
今日は何もしていません.javascriptの中のreplaceの方法を説明してください.もし話が間違っていたり、不合理だったりするのは道理の中のことです.私は古い鳥でもないし、初心者でもないので、私も私がどんな鳥なのか分かりません.は~です
replace方法のシンタックスは、strigObj.replaceであり、strigObjは文字列であり、reExpは正規表現オブジェクトであっても良いし、文字列であってもいいし、replace Textは検索に取って代わる文字列である.よりよく理解するために、簡単な例を挙げて説明します.
いくつかのサイトで記事を検索すると、検索のキーワードが色を変えて表示されますか?これはどうやって実現されますか?実際には正規表現で実現できますが、具体的にはどうなりますか?簡単な原理は下記のコードを見てください.
検索した文字を演算する場合、どうなりますか?実現する前に、どのように関数のパラメータを取得するかについて説明します.関数Functionの内部には、argmentsのセットがあります.このセットには現在の関数のすべてのパラメータが格納されています.argmentsを通じて関数のすべてのパラメータが得られます.ご理解のために、下記のコードをご覧ください.
replace方法のシンタックスは、strigObj.replaceであり、strigObjは文字列であり、reExpは正規表現オブジェクトであっても良いし、文字列であってもいいし、replace Textは検索に取って代わる文字列である.よりよく理解するために、簡単な例を挙げて説明します.
var stringObj=" , ";
// " " " "
//
// stringObj
var newstr=stringObj.replace(" "," ");
alert(newstr);
私より頭がいいあなたは上の例を見てから、第二の誤字の「終世」が「中国」に置き換えられていないことが分かります.私たちは二回のreplace方法を実行して、第二の誤字の「終世」も交替します.プログラムは改善された後、次のようになります.
var stringObj=" , ";
// " " " "
//
// stringObj
var newstr=stringObj.replace(" "," ");
newstr=newstr.replace(" "," ");
alert(newstr);
NのN乗の誤字があったら、NのN乗のreplace方法を実行して誤字を置換しますか?はい、恐れなくてもいいです.正規表現があったら、誤字を使わずにreplaceを実行します.プログラムを改善した後のコードは以下の通りです.
var reg=new RegExp(" ","g"); // RegExp
var stringObj=" , ";
var newstr=stringObj.replace(reg," ");
alert(newstr);
上で述べたのはreplaceの方法の最も簡単な応用で、みんなが分かりますか?ちょっと複雑なアプリケーションについて説明します.いくつかのサイトで記事を検索すると、検索のキーワードが色を変えて表示されますか?これはどうやって実現されますか?実際には正規表現で実現できますが、具体的にはどうなりますか?簡単な原理は下記のコードを見てください.
var str=" , ";
var newstr=str.replace(/( )/g,"<font color=red>$1</font>");
document.write(newstr);
上のプログラムはインタラクティブ性に欠けています.プログラムを改善して、検索する文字を自主的に入力できるようにします.
var s=prompt(" "," ");
var reg=new RegExp("("+s+")","g");
var str=" , ";
var newstr=str.replace(reg,"<font color=red>$1</font>");
document.write(newstr);
皆さんは米ドル1という特殊文字の意味がよく分かりませんが、実は$1は左式の中の括弧内の文字、つまり一番目の子のマッチングです.子マッチングとは何ですか?分かりやすい点で言えば、左の括弧は第一文字が一致し、第二括弧は第二子が一致します.検索した文字を演算する場合、どうなりますか?実現する前に、どのように関数のパラメータを取得するかについて説明します.関数Functionの内部には、argmentsのセットがあります.このセットには現在の関数のすべてのパラメータが格納されています.argmentsを通じて関数のすべてのパラメータが得られます.ご理解のために、下記のコードをご覧ください.
function test()
{
alert(" :"+arguments.length);
alert(" :"+arguments[0]);
alert(" "+arguments[1]);
// for
}
test("aa","bb","cc");
上の手順を読んでから、次の面白いプログラムを見に行きます.
var reg=new RegExp("\d","g");
var str="abd1afa4sdf";
str.replace(reg,function(){alert(arguments.length);});
私たちは驚くべき発見をしました.匿名関数は二回も実行されました.また関数には三つのパラメータがあります.なぜ二回も実行されますか?これは容易に考えられます.私たちが書いた正規表現は単一の数字にマッチしていますが、検出された文字列はちょうど2つの数字もありますので、匿名関数は2回実行されます.匿名関数の内部にある3つのパラメータはいったいどんな内容ですか?この問題を明らかにするために、次のコードを見ます.
function test()
{
for(var i=0;i<arguments.length;i++)
{
alert(" "+(i+1)+" :"+arguments[i]);
}
}
var reg=new RegExp("\d","g");
var str="abd1afa4sdf";
str.replace(reg,test);
観察した結果、最初のパラメータは一致する文字を表し、第二のパラメータはマッチング時の文字最小インデックス位置(RegExp.index)を表し、第三のパラメータは一致する文字列(RegExp.input)を表していることが分かりました.これらのパラメータの個数は、サブマッチングが多くなるにつれて多くなります.これらの問題を明らかにしたら、別の書き方を使ってもいいです.
function test($1)
{
return "<font color='red'>"+$1+"</font>"
}
var s=prompt(" "," ");
var reg=new RegExp("("+s+")","g");
var str=" , ";
var newstr=str.replace(reg,test);
document.write(newstr);
上のプログラムを見たら、マッチした文字を好き勝手にしていました.アプリケーションの例を簡単に挙げます.
var str=" 22 , 20 , 45 , 44 , 4 "
function test($1)
{
var gyear=(new Date()).getYear()-parseInt($1)+1;
return $1+"("+gyear+" )";
}
var reg=new RegExp("(\d+) ","g");
var newstr=str.replace(reg,test);
alert(str);
alert(newstr);