JavaScript関数 replace の秘密

高洛峰
高洛峰オリジナル
2016-11-28 15:58:431248ブラウズ

JavaScript の replace 関数は文字列置換関数として使用されます。これは強力な文字列操作関数であり、一般的な文字列操作に推奨される使用法です。このエッセイはそれをより深く理解するのに役立ちます。
replace 関数は 2 つのパラメータを受け入れます。最初のパラメータは文字列または正規表現です。最初のパラメータは文字列または関数も受け入れることができます。数 まず第一に、「I am a Boy」についてこれ以上説明する必要はありません。 .replace ("Boy", "Girl"), 出力: "I am a Girl"。ここで話したいのは、最初のパラメータが正規の場合です。正規表現の場合、置換動作はまずグローバルかどうかに基づいて決定されます (global//g)。all の場合はすべてが置換され、非グローバルの場合は最初に一致した文字列のみが置換されます。例:



"Ha Ha".replace(/bw+b/g, "He") // He He

"Ha Ha".replace(/bw+b/, "He") ) //He Ha

1: 2 番目のパラメータは文字列です:

正規置換には特別なマーカー $ があります:
1. $i (i:1-99): 左から右への正規部分表現を表します。一致したテキスト。
2
3. $`(`:Switch skill key): 一致する文字列の左側のテキストを表します。 (4. $ '(': 一重引用符): 一致する文字列の右側にある正しいテキスト。
5. $$: $ 転送を意味します。
ここにいくつかのデモがあります:



"boy & girl".replace(/(w+)s*&s*(w+)/g,"$2 & $1") //girl & boy

"boy " .replace(/w+/g,"$&-$&") // ボーイボーイ

"javascript".replace(/script/,"$& != $`") //javascript != java

"javascript".replace(/java/,"$&$' is ") // javascript はスクリプトです

2: 2 番目のパラメータは関数です:

ECMAScript3 では function メソッドを使用することをお勧めします。 JavaScript1 .2で実装されており、replaceメソッドが実行されるたびにこの関数が呼び出され、戻り値が置換の新しい値として使用されます。

関数パラメータの規則:
1. 最初のパラメータは、各一致の全文 ($&) です。
2. 中央のパラメータは部分式の一致する文字列です。($i (i:1-99))
3. 最後から 2 番目のパラメータは、一致するテキスト文字列の一致する添字の位置です。
4. 最後のパラメータは文字列そのものを表します。
これが、この記事で置換の力について述べることです。理論的なものはすべて空の問題を解決するための例が必要です:
1: 文字列の最初の文字を大文字にします:


String.prototype.capitalize = function(){ 
 
    return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); 
 
    } ); 
 
};

,

console.log(" i am a boy !".capitalize())

出力: I Am A Boy !

2: 文字列「Zhang San 56 点、Li Si 74 点、Wang Wu 92 点」のスコア抽出、Zhao Liu 84点」を要約し、平均点を計算し、各人の平均点差を出力します。




var s = "張三 56 ポイント、李斯 74 ポイント、王呉 92 ポイント、趙劉 84 ポイント";

var a = s.match(/\d+/g); 
 
var sum = 0; 
 
for(var i = 0 ; i < a.length; i++){ 
 
            sum += parseFloat(a[i]); 
 
} 
 
  
 
var avg = sum / a.length; 
 
  
 
function f(){ 
 
            var n = parseFloat(arguments[1]); 
 
            return n + "分" + "(" + ((n > avg) ? ("超出平均分" + (n - avg)) : 
 
                        ("低于平均分" + (avg - n))) + "分)"; 
 
} 
 
  
 
var result = s.replace(/(\d+)分/g, f); 
 
console.log(result);

出力:

張三 56 ポイント (平均より 20.5 ポイント低い) ) )、Li Si は 74 点 (平均より 2.5 点下)、Wang Wu は 92 点 (平均より 15.5 点上)、Zhao Liu は 84 点 (平均より 7.5 点上) を獲得しました


高度な通常のアプリケーションを追加した後、JavaScript replace はより大きな権限を返すため、ここでは通常の高度なアプリケーションのアサーションなどには触れません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。