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

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

String.slice
String.substring
вопрос задан 11.02.2010
tmim
3216 репутация

7 ответов


  • 670 рейтинг

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

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

    ответ дан Daniel Vassallo, с репутацией 261355, 11.02.2010
  • 67 рейтинг

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


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

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

    ответ дан Waddah, с репутацией 789, 10.08.2015
  • 18 рейтинг

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

    String.slice( begin [, end ] )
    String.substring( from [, to ] )
    String.substr( start [, length ] )
    

    Он также указывает, что если параметры для среза являются отрицательными, они ссылаются на строку с конца. Substring и substr не имеют.

    Вот его статья об этом http: // www. bennadel. ком / блог / 2159-с помощью ломтика-подстрока-и-зиЬзЬг-в-JavaScript. HTM

    ответ дан Jón Viðar Þorsteinsson, с репутацией 181, 5.12.2014
  • 9 рейтинг

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

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

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

    Кроме того, если start & gt; В конце концов, аргументы взаимозаменяемы, т.е. е. Линия сюжета возвращается между началом и концом:

    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-.

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

    ответ дан Alexandr, с репутацией 2622, 5.02.2016
  • 9 рейтинг

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

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

    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". часть (2,2), чтобы вернуть «3». Это делает заблуждение Энди выше оправданным - я бы ожидал «1234». срез (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с.

    ответ дан Gerard ONeill, с репутацией 2236, 4.06.2014
  • 2 рейтинг

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

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

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

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

    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

    Аргументы

    от Это должно быть неотрицательное целое число, чтобы указать индекс, с которого должна начинаться подстрока. С по Необязательное неотрицательное целое число для указания индекса, до которого должна быть завершена подстрока.

    ответ дан Sohail Arif, с репутацией 172, 24.05.2016
  • 0 рейтинг

    Для среза (начало, остановка), если останов является отрицательным, останов будет установлен в: строка. длина - матем. abs (стоп), скорее (строка. длина - 1) - матем. абс (остановка).

    ответ дан tingxuanz, с репутацией 11, 29.03.2017