これら2つの方法の違いは誰か知っていますか。
String.protorype.slice
String.protorype.substring
slice()
はsubstring()
のように動作しますが、いくつか異なる動作があります。
Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);
彼らが共通しているもの:
start
がstop
と等しい場合:空の文字列を返しますstop
を省略した場合:文字列の末尾まで文字を抽出しますsubstring()
の区別:
start > stop
の場合、substring
はこれら2つの引数を交換します。NaN
である場合、それは0
であるかのように扱われます。slice()
の区別:
start > stop
の場合、slice()
は空の文字列を返します。 (""
)start
が負の場合:Firefoxのsubstr()
とまったく同じように、文字列の末尾からcharを設定します。この動作はFirefoxとIEの両方で見られます。stop
が負の場合: ECMA仕様 でカバーされているように0で制限されることを除いて(つまりstring.length – Math.abs(stop)
)、stopを:Math.max(0, string.length + stop)
(元の値)に設定します。注:急いでいる場合、および/または短い答えを探している場合は、答えの下部までスクロールして、最後の2行を読んでください。
事実を述べることから始めましょう:
構文:string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
注1:slice()==substring()
それは何ですか?slice()
メソッドは文字列の一部を抽出し、抽出した部分を新しい文字列として返します。substr()
メソッドは、指定された位置にある文字から文字列の一部を抽出し、指定された文字数を返します。substring()
メソッドは文字列の一部を抽出し、抽出した部分を新しい文字列として返します。
注2:slice()==substring()
元の文字列を変更しますか?slice()
しませんsubstr()
しませんsubstring()
しません
注3:slice()==substring()
引数として負の数を使用する:slice()
は文字列の末尾から始まる文字を選択しますsubstr()
は、文字列の末尾から始まる文字を選択しますsubstring()
が実行しない
注3:slice()==substr()
最初の引数が2番目の引数より大きい場合slice()
が実行しないsubstr()
は第2引数は位置ではなく長さの値なので、問題なく通常どおりに機能します。substring()
は2つの引数を交換し、いつものように実行します
最初の引数:slice()
必須、次のことを示します:インデックスの開始substr()
必須、次のことを示します:インデックスの開始substring()
必須、次のことを示します:インデックスの開始
注4:slice()==substr()==substring()
第二引数:slice()
オプション、抽出を終了する位置(最大まで、ただし含まない)substr()
オプション、抽出する文字数substring()
オプション、抽出を終了する位置(最大まで、ただし含まない)
注5:slice()==substring()
第二引数を省略した場合はどうなりますか?slice()
は、文字列の開始位置から終了位置までのすべての文字を選択しますsubstr()
は、文字列の開始位置から終了位置までのすべての文字を選択しますsubstring()
は、文字列の開始位置から終了位置までのすべての文字を選択します
注6:slice()==substr()==substring()
そのため、slice()
とsubstr()
の間に違いがあると言うことができますが、substring()
は基本的にslice()
のコピーです。
要約すれば:
停止するインデックス(位置)がわかっている場合(ただし、含めないでください)、slice()
を使用してください。
抽出する文字の長さがわかっている場合はsubstr()
を使用してください。
Ben Nadelがこれについて良い記事を書いています。彼はこれらの関数に対するパラメータの違いを指摘しています。
String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )
また、スライスするパラメータが負の場合は、末尾から文字列を参照することも指摘しています。 Substringとsubstrは違います。
これはこれについての彼の記事です http://www.bennadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm
一つの答えは大丈夫ですが少し読む必要があります。特に新しい用語 "stop"を使って。
My Go - 上記のDanielによる最初の回答に加えて、違いを整理して役に立つようにしました。
1)負の指数。部分文字列は正のインデックスを必要とし、負のインデックスを0に設定します。スライスの負のインデックスは文字列の末尾からの位置を意味します。
"1234".substring(-2, -1) == "1234".substring(0,0) == ""
"1234".slice(-2, -1) == "1234".slice(2, 3) == "3"
2)インデックスの交換サブストリングは、最初のインデックスが2番目のインデックス以下になるようにインデックスを並べ替えます。
"1234".substring(3,2) == "1234".substring(2,3) == "3"
"1234".slice(3,2) == ""
一般的なコメント - 2番目のインデックスがスライスまたはサブストリングの最後の文字の後の位置であることは奇妙です。私は "1234" .slice(2,2)が "3"を返すことを期待します。これはAndyの上記の混乱を正当化します - 私は "1234" .slice(2、-1)が "34"を返すことを期待します。はい、これはJavascriptが初めてのことを意味します。これは、この動作も意味します。
"1234".slice(-2, -2) == "", "1234".slice(-2, -1) == "3", "1234".slice(-2, -0) == "" <-- you have to use length or omit the argument to get the 4.
"1234".slice(3, -2) == "", "1234".slice(3, -1) == "", "1234".slice(3, -0) == "" <-- same issue, but seems weirder.
私の2c.
Substringとsliceの違いは、負の行を見逃している行を海外で引数にする方法です。
サブストリング(開始、終了)
負の引数はゼロとして解釈されます。大きすぎる値は、文字列の長さに切り捨てられます。alert( "testme" .substring(-2)); // "testme"、-2は0になる
さらに、start> endの場合、引数は交換されます。つまり、plot lineはstartとendの間に戻ります。
alert ( "testme" .substring (4, -1)); // "test"
// -1 Becomes 0 -> got substring (4, 0)
// 4> 0, so that the arguments are swapped -> substring (0, 4) = "test"
スライス
負の値は行の終わりから測定されます。
alert ( "testme" .slice (-2)); // "me", from the end position 2
alert ( "testme" .slice (1, -1)); // "estm", from the first position to the one at the end.
それは奇妙な論理部分文字列よりはるかに便利です。
Substrの最初のパラメータの負の値は、IE 8を除くすべてのブラウザでサポートされています。
これら3つの方法のいずれかを選択すると、ほとんどの状況で使用できます - それは slice :負の引数になり、それは最も明白に維持され動作します。
スライスと部分文字列メソッドの唯一の違いは引数です。
両方とも2つの引数を取ります。開始/開始および終了/終了。
substring methodに最初の引数として負の値を渡すことはできませんが、 slice methodに最後から移動するために渡すことはできません。
スライスメソッド引数の詳細:
REF: http://www.thesstech.com/javascript/string_slice_method
引数
start_index スライスの開始位置からのインデックス。値が負で提供されている場合、それは最後から開始することを意味します。例えば最後の文字は-1です。 end_index スライス終了後のインデックス。指定されていない場合、スライスはstart_indexから文字列の終わりまでとられます。負の値の場合、インデックスは文字列の末尾から測定されます。
サブストリングメソッド引数の詳細:
REF: http://www.thesstech.com/javascript/string_substring_method
引数
from サブストリングの開始位置からインデックスを指定するには、負ではない整数を指定します。 to 部分文字列を終了する前にインデックスを付けるためのオプションの負でない整数。
Slice(start、stop)の場合、stopが負の値の場合、stopは次のように設定されます。string.length - Math.abs(stop)ではなく(string.length - 1) - Math.abs(stop)。
substr:指定されたインデックスに基づいて文字列の一部を取得するためのものです。 substr- string.substr(start、end)の構文start - start indexは、フェッチの開始位置を示します。 end-endインデックスは、文字列の取得先を指示します。オプションです。
slice:指定されたインデックスに基づいて文字列の一部を取得するためのものです。ポジティブとインデックスを指定できます。 sliceの構文 - string.slice(start、end)開始 - 開始インデックスは、取得開始位置を示します。終了 - 終了インデックスは、文字列の取得先を示します。オプションです。 'splice'では、開始インデックスと終了インデックスの両方が正と負のインデックスをとるのに役立ちます。
文字列内の 'slice'のサンプルコード
var str="Javatscript";
console.log(str.slice(-5,-1));
output: crip
文字列内の 'substring'のサンプルコード
var str="Javatscript";
console.log(str.substring(1,5));
output: avat
[*注:負のインデックスは文字列の末尾から始まります。