javascript replace方法と正規表現


作者: [email protected]  <スクリプト laguage="javascript"var strigObj=「永遠人民共和国、永遠の人民」誤字の「終古」を「中国」に置き換えた新しい文字を返します。/元の文字列のstingObjの値は変更されていません。var newstr=strigObj.replace(「中古」「中国」)  alert(newstr)私より頭がいいあなたは上の例を見てから、第二の誤字の「終古」が「中国」に置き換えられていないことを発見します。私たちは二回のreplace方法を実行して、第二の誤字の「終世」も交替します。プログラムは改善された後、次のようになります。 laguage="javascript"var strigObj=「永遠人民共和国、永遠の人民」誤字の「終古」を「中国」に置き換えた新しい文字を返します。/元の文字列のstingObjの値は変更されていません。var newstr=strigObj.replace(「中古」「中国」)  newstr=newstr.replace(「中国」)  alert(newstr)私達は詳しく考えてもいいです。NのN乗の誤字があれば、NのN乗のreplace方法を実行して誤字を置き換える必要がありますか?はい、恐れなくてもいいです。正規表現があったら、誤字を使わずにreplaceを実行します。プログラムを改善した後のコードは以下の通りです。 laguage="javascript"var reg=new RegExp(「エグゼクティブ」「g」) //正規のRegExpオブジェクトを作成するvar strigObj=「永遠人民共和国、永遠の人民」var newstr=strigObj.replace(reg,「中国」)  alert(newstr)上で述べたのはreplaceの方法の一番簡単な応用ですが、皆さんは分かりますか?ちょっと複雑なアプリケーションについて説明します。いくつかのサイトで記事を検索すると、検索のキーワードが色を変えて表示されますか?これはどうやって実現されますか?実際には正規表現で実現できますが、具体的にはどうなりますか?簡単な原理は下記のコードを見てください。 laguage="javascript"var str=「中華人民共和国、中華人民共和国」var newstr=str.replace(/(人)/g," カラー=red>$1");document.write(newstr);script上のプログラムはインタラクティブ性に欠けています。プログラムを改善して、検索する文字を自主的に入力できるようにします。 laguage="javascript"var s=prompt(「検索中の文字を入力してください」、「人」)var reg=new RegExp('+s+')","g")var str=「中華人民共和国、中華人民共和国」var newstr=str.replace カラー=red>$1");document.write(newstr);script>皆さんは米ドル1という特殊文字の意味がよく分かりませんが、実は$1は左式の中の括弧内の文字、つまり一番目の子のマッチングです。子マッチングとは何ですか?分かりやすい点で言えば、左の括弧は第一文字が一致し、第二括弧は第二子が一致します。   検索した文字を演算する場合、どうなりますか?実現する前に、どのように関数のパラメータを取得するかについて説明します。関数Functionの内部には、argmentsのセットがあります。このセットには現在の関数のすべてのパラメータが格納されています。argmentsを通じて関数のすべてのパラメータが得られます。ご理解のために、下記のコードをご覧ください。 laguage=「javascript」function test(){alert("パラメータ個数:"+argments.length);alert(「各パラメータの値:」+argments[0])alert(「2番目のパラメータの値」+argments[1])//for循環ですべてのパラメータ}test(「aa」「bb」「cc」)を読み取ることができます。  私たちは驚くべき発見をしました。匿名関数は二回実行されました。そして関数には三つのパラメータがあります。なぜ二回実行されますか?これは容易に考えられます。私たちが書いた正規表現は単一の数字にマッチしていますが、検出された文字列はちょうど2つの数字もありますので、匿名関数は2回実行されます。匿名関数の内部にある3つのパラメータはいったいどんな内容ですか?この問題を明らかにするために、次のコードを見ます。スクリプト laguage=「javascript」function test(){for(var) i=0;i観察した結果、第一のパラメータは一致する文字を表し、第二のパラメータはマッチング時の文字最小インデックス位置(RegExp.index)を表し、第三のパラメータはマッチングされた文字列(RegExp.input)を表していることが分かりました。これらのパラメータの個数は、サブマッチングが多くなるにつれて多くなります。これらの問題を明らかにしたら、私たちは別の書き方を使ってもいいです。 laguage=「javascript」function test($1){return} """var s=prompt(「検索中の文字を入力してください」、「人」)var reg=new RegExp('+s+')","g")var str=「中華人民共和国、中華人民共和国」var newstr=str.replace(reg,test)document.write(newstr);script>上のプログラムを見て、マッチした文字を好き勝手にやってもいいです。アプリケーションの例を簡単に挙げます。 laguage="javascript"var str=「彼は今年22歳で、彼女は今年20歳です。彼の父は今年45歳です。彼女の父は今年44歳です。全部で4人です。」 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)