replace メソッドの構文は次のとおりです。 stringObj.replace(rgExp, replaceText) ここで、stringObj は文字列 (string)、reExp は正規表現オブジェクト (RegExp) または文字列 (string)、replaceText は見つかった文字列の置換です。弦。 。 。誰もがよりよく理解できるように、以下に簡単な例を挙げてみましょう。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
var stringObj="中谷人民共和国、中谷人民";
//タイプミス「Zhonggu」を「China」に置き換えます
//そして置き換えられた新しい文字を返します
//元の文字列 stringObj の値は変更されていません
var newstr=stringObj.replace("中区","中国");
アラート(newstr);
</script>
「中國」とは「中国」のこと。
の値
中国");
私より賢い人なら、上の例を読んだ後、2 番目のタイプミス「Zhonggu」が「China」に置き換えられていないことがわかるでしょう。2 番目のタイプミス「Zhonggu」を置き換える二次置換メソッドを実行できます。以下のように改善されました。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
var stringObj="中谷人民共和国、中谷人民";
//タイプミス「Zhonggu」を「China」に置き換えます
//そして置き換えられた新しい文字を返します
//元の文字列 stringObj の値は変更されていません
var newstr=stringObj.replace("中区","中国");
newstr=newsstr.replace("中区","中国");
アラート(newstr);
</script>
「中國」とは「中国」のこと。
の値
中国");
中国");
よく考えて、N の N 乗個のタイプミスがある場合、N の N 乗置換メソッドを実行してタイプミスを置き換えるべきでしょうか。 ?心配する必要はありません。正規表現を使用すると、タイプミスのために一度 replace メソッドを実行する必要はありません。 。プログラムを改良した後のコードは以下の通りです
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
var reg=new RegExp("久古","g") //通常の RegExp オブジェクトを作成します
var stringObj="中谷人民共和国、中谷人民";
var newstr=stringObj.replace(reg,"中国");
アラート(newstr);
</script>
通常の RegExp オブジェクトを作成する
以上がreplaceメソッドの最も簡単な応用方法であることが理解できたでしょうか。 ?もう少し複雑なアプリケーションから始めましょう。 。
いくつかのWebサイトで記事を検索すると、検索キーワードが強調表示されたり、色が変わったりする現象が発生することがありますか? ?これはどのようにして達成されるのでしょうか? ?実際、正規表現を使用してそれを実現できます。簡単な原理については、以下のコードを参照してください。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
var str="中華人民共和国、中華人民共和国";
var newstr=str.replace(/(人)/g,"<font color=red>$1</font>");
document.write(newstr);
</script>
上記のプログラムには対話性が欠けています。検索したい文字を独自に入力できるようにプログラムを改良しましょう。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
var s=prompt("探している文字を入力してください", "人物");
var reg=new RegExp("("+s+")","g");
var str="中華人民共和国、中華人民共和国";
var newstr=str.replace(reg,"<font color=red>$1</font>");
document.write(newstr);
</script>
人々");
おそらく誰もが特殊文字 $1 が何を意味するのかよく理解していません。実際、$1 は左側の式の中の括弧内の文字、つまり最初の部分一致を表します。同様に、$2 は 2 番目の部分一致を表します。 。サブマッチとは何ですか? ?平たく言えば、左側の各括弧は最初の単語の一致であり、2 番目の括弧は 2 番目の部分一致です。 。
見つかった文字に対して操作を実行したい場合、どのように実装すればよいでしょうか? ?実装する前に、まず特定の関数のパラメーターを取得する方法について説明します。 。関数内には引数コレクションがあり、このコレクションには現在の関数のすべてのパラメーターが格納されます。理解するには、次のコードを参照してください。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
関数テスト(){
alert("パラメータの数:"+arguments.length);
alert("各パラメータの値: "+arguments[0]);
alert("2 番目のパラメータの値"+arguments[1]);
// for ループを使用してすべてのパラメータを読み取ることができます
}
テスト("aa","bb","cc");
</script>
アラート("
アラート("
アラート("
//ループしてすべてのパラメータを読み取ります
上記のプログラムを理解した後、次の興味深いプログラムを見てみましょう。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
var reg=new RegExp("//d","g");
var str="abd1afa4sdf";
str.replace(reg,function(){alert(arguments.length);});
</script>
匿名関数が 2 回実行されたことに驚きましたが、関数には 3 つのパラメーターがありました。なぜ 2 回実行されたのでしょうか? ?これは簡単に考えることができます。なぜなら、作成した正規表現は 1 つの数値に一致し、検出された文字列にはたまたま 2 つの数値が含まれているため、匿名関数が 2 回実行されるからです。 。無名関数内の 3 つのパラメータは何ですか? ?この問題を明確にするために、次のコードを見てみましょう。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
関数テスト(){
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);
</script>
for(var i=0;i<arguments.length;i++){
alert("パラメータの値: "+arguments[i]);
}
観察の結果、最初のパラメータは一致した文字を表し、2 番目のパラメータは一致時の文字の最小インデックス位置 (RegExp.index) を表し、3 番目のパラメータは一致した文字列 (RegExp.input) を表していることがわかりました。実際、サブマッチの数が増加するにつれて、これらのパラメーターの数も増加します。これらの問題を明確にした後、別の書き方を使用できます。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
関数テスト($1){
"<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);
</script>
"<font color='red'>"+$1+"</font>" を返します
人々");
上記のプログラムを読むと、一致した文字を使用して何でもできることがわかります。簡単なアプリケーションの例を次に示します。
JSコード
次のようにコードをコピーします。
<スクリプト言語="javascript">
var str="彼は22歳、彼女は20歳、彼の父親は45歳、彼女の父親は44歳、合計4人です"
関数テスト($1){
var gyear=(new Date()).getyear()-parseInt($1)+1;
return $1+"("+gyear+"誕生年)";
}
var reg=new RegExp("(//d+)歳","g");
var newstr=str.replace(reg,test);
アラート(文字列);
アラート(newstr);
</script>