substr()、substring()、slice()メソッドは文字列をインターセプトするときによく使われますが、使い方が混同されている場合があるのでまとめておきます。
読書ディレクトリ
•スライス()
•substring()
•substr()
•概要
スライス()
定義: 1 つまたは 2 つのパラメーターを受け入れ、最初のパラメーターは部分文字列の開始位置を指定します。 2 番目のパラメーターは部分文字列の終了位置を表します (終了位置の文字を除く)。2 番目のパラメーターが渡されない場合、文字列の長さが終了位置として使用されます。
1. 渡されたパラメータが正の値の場合:
var str ="helloWorld"; // 一个参数,则将字符串长度作为结束位置 alert(str.slice(3)); // "loWorld" // 两个参数,7位置上的字符为"r",但不包括结束位置的字符 alert(str.slice(3,7)); // "loWo"
2. 渡されたパラメータが負の値の場合:
slice()方法会将传入的负值与字符串长度相加。 var str ="helloWorld"; // 一个参数,与字符串长度相加即为slice(7) alert(str.slice(-3)); // "rld" // 两个参数,与字符串长度相加即为slice(3,6) alert(str.slice(3,-4)); // "loW"
3. 2 番目のパラメータが最初のパラメータより小さい場合:
slice() メソッドによって渡された 2 番目のパラメーターが最初のパラメーターより小さい場合、空の文字列が返されます。
var str ="helloWorld"; alert(str.slice(5,3)); // ""
4. IE の互換性
IE8 ブラウザでテストした場合、問題はなく、動作は最新のブラウザと一致しています。
部分文字列()
定義: 1 つまたは 2 つのパラメーターを受け入れ、最初のパラメーターは部分文字列の開始位置を指定します。 2 番目のパラメーターは部分文字列の終了位置を表します (終了位置の文字を除く)。2 番目のパラメーターが渡されない場合、文字列の長さが終了位置として使用されます。
1.渡されたパラメータが正の値の場合:slice()メソッドと同じ動作
var str ="helloWorld"; // 一个参数,则将字符串长度作为结束位置 alert(str.substring(3)); // "loWorld" // 两个参数,7位置上的字符为"r",但不包括结束位置的字符 alert(str.substring(3,7)); // "loWo"
2. 渡されたパラメータが負の値の場合:
substring() メソッドは、すべての負のパラメーターを 0 に変換します。例を見てみましょう:
var str ="helloWorld"; // 两个参数,-4会转换为0,相当于substring(3,0) -->即为 substring(0,3) alert(str.substring(3,-4)); // "hel"
substring() メソッドは、小さい方の数値を開始位置として使用し、大きい方の数値を終了位置として使用します。上の例と同様、substring(3,0) と substring(0,3) は同じ効果があります。
4. IE の互換性
IE8 ブラウザでテストした場合、問題はなく、動作は最新のブラウザと一致しています。
substr()
定義: 1 つまたは 2 つのパラメーターを受け入れ、最初のパラメーターは部分文字列の開始位置を指定します。 2 番目のパラメーターは前のメソッドとは多少異なり、返される文字数を示します。 2 番目の引数が渡されない場合は、文字列の長さが終了位置として使用されます。例を見てみましょう:
1. 渡されたパラメータが正の値の場合:
var str ="helloWorld"; // 一个参数,则将字符串长度作为结束位置 alert(str.substr(3)); // "loWorld" // 两个参数,从位置3开始截取后面7个字符 alert(str.substr(3,7)); // "loWorld"
2. 渡されたパラメータが負の値の場合:
substr() メソッドは、負の最初のパラメーターを文字列の長さに追加し、負の 2 番目のパラメーターを 0 に変換します。
var str ="helloWorld"; // 将第一个负的参数加上字符串的长度---> //即为:substr(7,5) ,从位置7开始向后截取5个字符 alert(str.substr(-3,5)); // "rld" // 将第二个参数转换为0 // 即为:substr(3,0),即从位置3截取0个字符串,则返回空 alert(str.substr(3,-2)); // ""
3. IE の互換性
substr() メソッドは負の値を渡すと問題が発生し、元の文字列が返されます。 IE9 ではこの問題が修正されています。
概要
正のパラメータを渡す場合、slice() と substring () の動作は一貫しており、substr() メソッドは 2 番目のパラメータで混乱しやすくなります
負のパラメータを渡す場合、slice() メソッドは文字列の長さを加算します。これは一般的な考えに沿っていますが、substring() の 2 番目のパラメータを 0 に変換すると問題が発生しやすく、開始位置が変更されます。 substr() メソッドに負の値を指定すると、IE との互換性の問題が発生します。
要約すると、一般的には、slice() メソッドを使用することをお勧めします。
スライス、部分文字列、部分文字列の違いを紹介しましょう
まず、どちらも 2 つのパラメータを受け取ります。slice と substring は開始位置と終了位置 (終了位置を除く) を受け取り、substr は開始位置と返される文字列の長さを受け取ります。以下の例を見てください:
var test = 'hello world'; alert(test.slice(,)); //o w alert(test.substring(,)); //o w alert(test.substr(,)); //o world
ここで注意すべき点は、substring は 2 つのパラメーターのうち小さい方を開始位置として使用し、大きい方のパラメーターを終了位置として使用することです。
例:
alert(test.substring(7,4)); //o w
次に、受け取ったパラメータが負の数値の場合、slice はその文字列の長さを対応する負の数値に加算し、その結果がパラメータとして使用されます。substr は最初のパラメータを加算した結果のみになります。最初のパラメータとして文字列の長さを指定し、すべての負のパラメータを直接 0 に変換します。テストコードは次のとおりです:
var test = 'hello world'; alert(test.slice(-)); //rld alert(test.substring(-)); //hello world alert(test.substr(-)); //rld alert(test.slice(,-)); //lo w alert(test.substring(,-)); //hel alert(test.substr(,-)); //空字符串
注: IE では、substr で受け取った負の値の処理にエラーがあり、元の文字列が返されます。