web-dev-qa-db-ja.com

String.sliceとString.substringの違いは何ですか?

これら2つの方法の違いは誰か知っていますか。

String.protorype.slice
String.protorype.substring
682
tmim

slice()substring()のように動作しますが、いくつか異なる動作があります。

Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);

彼らが共通しているもの:

  1. startstopと等しい場合:空の文字列を返します
  2. stopを省略した場合:文字列の末尾まで文字を抽出します
  3. どちらかの引数が文字列の長さより大きい場合は、代わりに文字列の長さが使用されます。

substring() の区別:

  1. start > stopの場合、substringはこれら2つの引数を交換します。
  2. どちらかの引数が負であるかNaNである場合、それは0であるかのように扱われます。

slice() の区別:

  1. start > stopの場合、slice()は空の文字列を返します。 (""
  2. startが負の場合:Firefoxのsubstr()とまったく同じように、文字列の末尾からcharを設定します。この動作はFirefoxとIEの両方で見られます。
  3. stopが負の場合: ECMA仕様 でカバーされているように0で制限されることを除いて(つまりstring.length – Math.abs(stop))、stopを:Math.max(0, string.length + stop)(元の値)に設定します。

出典: プログラミングと開発の基礎となる芸術:Javascript:substr()とサブストリング()

724
Daniel Vassallo

注:急いでいる場合、および/または短い答えを探している場合は、答えの下部までスクロールして、最後の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()を使用してください。

78
Waddah

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.

10
Gerard ONeill

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 :負の引数になり、それは最も明白に維持され動作します。

9
Alexandr

スライスと部分文字列メソッドの唯一の違いは引数です。

両方とも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 部分文字列を終了する前にインデックスを付けるためのオプションの負でない整数。

2
Sohail Arif

Slice(start、stop)の場合、stopが負の値の場合、stopは次のように設定されます。string.length - Math.abs(stop)ではなく(string.length - 1) - Math.abs(stop)。

0
tingxuanz

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

[*注:負のインデックスは文字列の末尾から始まります。

0
subham ruj