it-swarm.com.ru

В чем разница между String.slice и String.substring?

Кто-нибудь знает, в чем разница между этими двумя методами:

String.protorype.slice
String.protorype.substring
657
tmim

slice() работает как substring() с несколькими различными поведениями.

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

Что у них общего:

  1. Если start равен stop: возвращает пустую строку
  2. Если stop опущено: извлекает символы до конца строки
  3. Если какой-либо аргумент превышает длину строки, вместо нее будет использоваться длина строки.

Отличия отsubstring():

  1. Если start > stop, то substring поменяет эти 2 аргумента.
  2. Если какой-либо аргумент отрицательный или является NaN, он обрабатывается так, как если бы он был 0.

Отличия отslice():

  1. Если start > stop, slice() вернет пустую строку. ("")
  2. Если start отрицателен: устанавливает символ в конце строки, точно так же, как substr() в Firefox. Такое поведение наблюдается как в Firefox, так и в IE.
  3. Если stop отрицателен: устанавливает останов в: string.length – Math.abs(stop) (исходное значение), за исключением ограниченного 0 (таким образом, Math.max(0, string.length + stop)), как указано в спецификации ECMA .

Источник: элементарное искусство программирования и развития: Javascript: substr () v.s. подстрока ()

711
Daniel Vassallo

Примечание: если вы спешите и/или ищете короткий ответ, прокрутите до конца ответа и прочитайте последние две строки. Если не спешите, прочитайте все это.


позвольте мне начать с констатации фактов:

Синтаксис:
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()

если первый аргумент больше второго:
slice() не выполняет
substr() поскольку Второй Аргумент НЕ является позицией, а значением длины, он будет работать как обычно, без проблем
substring() поменяет два аргумента и будет работать как обычно

первый аргумент:
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().

75
Waddah

Бен Надель написал хорошую статью об этом, он указывает на разницу в параметрах для этих функций:

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

18
Jón Viðar Þorsteinsson

Один ответ хорошо, но требует небольшого прочтения. Особенно с новой терминологией «стоп».

Мой путь - организован по различиям, чтобы сделать его полезным в дополнение к первому ответу Даниэля выше:

1) отрицательные показатели. Подстрока требует положительных индексов и установит отрицательный индекс равным 0. Отрицательный индекс среза означает позицию от конца строки.

"1234".substring(-2, -1) == "1234".substring(0,0) == ""
"1234".slice(-2, -1) == "1234".slice(2, 3) == "3"

2) Обмен индексами. Подстрока будет переупорядочивать индексы, чтобы первый индекс был меньше или равен второму индексу.

"1234".substring(3,2) == "1234".substring(2,3) == "3"
"1234".slice(3,2) == ""

--------------------------

Общий комментарий - я нахожу странным, что второй индекс - это позиция после последнего символа среза или подстроки. Я ожидаю, что «1234» .slice (2,2) вернет «3». Это оправдывает замешательство Энди выше - я ожидаю, что «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.

Мой 2с.

10
Gerard ONeill

Разница между подстрокой и срезом - в том, как они работают с аргументами минус и пропускающими строки за рубежом:

подстрока (начало, конец)

Отрицательные аргументы интерпретируются как ноль. Слишком большие значения усекаются до длины строки: alert ("testme" .substring (-2)); // "testme", -2 становится 0

Кроме того, если 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 поддерживается во всех браузерах, кроме IE8-.

Если выбор одного из этих трех методов, для использования в большинстве ситуаций - это будетslice: отрицательные аргументы и он поддерживает и действует наиболее очевидно.

9
Alexandr

Единственная разница между срезом и методом подстроки состоит в аргументах

Оба принимают два аргумента, например, начало/с и конец/до.

Вы не можете передать отрицательное значение в качестве первого аргумента для метода substring, но для метода slice, чтобы пройти его от конца.

Детали аргумента метода среза:

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 Это должно быть неотрицательное целое число, чтобы указать индекс, с которого должна начинаться подстрока .до Необязательное неотрицательное целое число, чтобы указать индекс перед какой подстрокой должно быть закончено.

2
Sohail Arif

Для слайса (начало, остановка), если остановка отрицательна, останов будет установлен на: string.length - Math.abs (остановка), а точнее (string.length - 1) - Math.abs (остановка).

0
tingxuanz

substr: он предоставляет нам возможность извлекать часть строки на основе указанного индекса. синтаксис substr-string.substr (start, end) start - start index указывает, где начинается выборка. end - end index указывает, куда извлекается строка. Это необязательно.

slice: обеспечивает выборку части строки на основе указанного индекса. Это позволяет нам указывать позитив и индекс. синтаксис slice - string.slice (start, end) start - start index указывает, где происходит выборка start.It end - end index указывает, где строка выбирается. Это необязательно. В «соединении» как начальный, так и конечный индексы помогают получить положительный и отрицательный индексы.

пример кода для «среза» в строке

var str="Javatscript";
console.log(str.slice(-5,-1));

output: crip

пример кода для «подстроки» в строке

var str="Javatscript";
console.log(str.substring(1,5));

output: avat

[* Примечание: отрицательная индексация начинается в конце строки.]

0
subham ruj