String.prototype.substring()

Метод substring() повертає частину рядка між початковим та кінцевим індексами, або до кінця рядка.

Синтаксис

str.substring(indexStart[, indexEnd])

Параметри

indexStart
Індекс першого символу, який потрібно включити у повернений рядок.
indexEnd Optional
Індекс першого символу, який непотрібно включати у повернений рядок.

Значення, що повертається

Новий рядок, що містить вказану частину наданого рядка.

Опис

Метод substring() вирізає символи, починаючи з indexStart, і до (але не включно зindexEnd. Зокрема:

  • Якщо indexEnd не надано, substring() вирізає символи до кінця рядка.
  • Якщо indexStart дорівнює indexEnd, substring() повертає порожній рядок.
  • Якщо indexStart більший за indexEnd, тоді ефект substring() буде такий, ніби два аргументи поміняли місцями; Дивіться приклад нижче.

Будь-яке значення аргументу менше за 0 чи більше за stringName.length вважається рівним 0 та stringName.length, відповідно.

Будь-яке значення аргументу, що є NaN, вважається рівним 0.

Приклади

Використання substring()

Наступний приклад використовує substring(), щоб вивести символи з рядка 'Mozilla':

let anyString = 'Mozilla'

// Виводить 'M'
console.log(anyString.substring(0, 1))
console.log(anyString.substring(1, 0))

// Виводить 'Mozill'
console.log(anyString.substring(0, 6))

// Виводить 'lla'
console.log(anyString.substring(4))
console.log(anyString.substring(4, 7))
console.log(anyString.substring(7, 4))

// Виводить 'Mozilla'
console.log(anyString.substring(0, 7))
console.log(anyString.substring(0, 10))

Використання substring() з властивістю length

Наступний приклад використовує метод substring() та властивість length, щоб отримати останні символи певного рядка. Цей метод, можливо, легше запам'ятати, враховуючи, що вам не потрібно знати початковий та кінцевий індекси, як у попередніх прикладах.

// Виводить 'illa', останні 4 символи
let anyString = 'Mozilla'
let anyString4 = anyString.substring(anyString.length - 4)
console.log(anyString4)

// Виводить 'zilla' останні 5 символів
let anyString = 'Mozilla'
let anyString5 = anyString.substring(anyString.length - 5)
console.log(anyString5)

Різниця між substring() та substr()

Існує невелика відмінність між методами substring() та substr(), тому слід бути обережними, щоб не переплутати їх.

Аргументи substring() відображають початковий та кінцевий індекси, в той час, як аргументи substr() відображають початковий індекс та кількість символів, яку необхідно включити у повернений рядок.

Крім того, метод substr() вважається застарілою функціональністю ECMAScript та може бути прибраний з майбутніх версій, а отже, його краще уникати, де можливо.

let text = 'Mozilla'
console.log(text.substring(2,5))  // => "zil"
console.log(text.substr(2,3))     // => "zil"

Різниця між substring() та slice()

Методи substring() та slice() майже ідентичні, але між ними є пара невеликих відмінностей, особливо у поводженні з від'ємними аргументами.

Метод substring() міняє місцями свої аргументи, якщо indexStart більший за indexEnd, це означає, що рядок все одно буде повернений. Метод slice() повертає порожній рядок у цьому випадку.

let text = 'Mozilla'
console.log(text.substring(5, 2))  // => "zil" 
console.log(text.slice(5, 2))      // => ""

Якщо один або обидва аргументи від'ємні чи NaN, метод substring() вважає, що вони дорівнюють 0.

console.log(text.substring(-5, 2))  // => "Mo"
console.log(text.substring(-5, -2)) // => "" 

slice() також вважає аргументи NaN рівними 0, але, коли отримує від'ємні значення, він рахує індекс у зворотньому напрямку, з кінця рядка.

console.log(text.slice(-5, 2))   // => ""
console.log(text.slice(-5, -2))  // => "zil"

Дивіться більше прикладів з від'ємними числами на сторінці slice().

Заміна підрядка всередині рядка

Наступний приклад замінює підрядок всередині рядка. Він замінить і окремі символи, і підрядки. Виклик функції в кінці прикладу змінює рядок Прекрасний новий світ на Прекрасний новий сайт.

// Замінює oldS на newS у рядку fullS
function replaceString(oldS, newS, fullS) {
  for (let i = 0; i < fullS.length; ++i) {
    if (fullS.substring(i, i + oldS.length) == oldS) {
      fullS = fullS.substring(0, i) + newS + fullS.substring(i + oldS.length, fullS.length)
    }
  }
  return fullS
}

replaceString('світ', 'сайт', 'Прекрасний новий світ')

Зауважте, що це може призвести до нескінченного циклу, якщо oldS сам є підрядком newS — наприклад, якби ви спробували замінити тут 'світ' на 'всесвіт'.

Кращим методом заміни рядків є наступний:

function replaceString(oldS, newS, fullS) {
  return fullS.split(oldS).join(newS)
}

Наведений вище код є прикладом операцій з підрядками. Якщо вам необхідно замінювати підрядки, в більшості випадків вам краще скористатись String.prototype.replace().

Специфікації

Специфікація
ECMAScript (ECMA-262)
The definition of 'String.prototype.substring' in that specification.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
substringChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support

Див. також