String.prototype.indexOf()

Метод indexOf() починає пошук від символа за індексом fromIndex всередині об'єкта String, з якого здійснюється виклик метода, і вертає індекс першого знайденого збігу із шуканим значенням. Якщо значення не знайдене, повертає -1.

Заувага: Клас Array має подібний метод indexOf().

Синтаксис

str.indexOf(searchValue[, fromIndex])

Параметри

searchValue
Рядок, що є шуканим значенням.
Якщо рядок явно не заданий, searchValue буде примусово приведений до "undefined", і пошук цього значення буде здійснюватись у str.
Отже, для прикладу: 'undefined'.indexOf() поверне 0, оскільки значення undefined знайдене на позиції 0, але 'undefine'.indexOf() поверне -1, оскільки рядок "undefine" не знайдений.
fromIndex Optional
Ціле число, що позначає індекс, з якого має розпочинатися пошук; за замовчуванням дорівнює 0.
Якщо вказане значення fromIndex менше за 0 чи більше за str.length, пошук розпочнеться з індексу 0 та str.length, відповідно.
Для прикладу, 'всім привіт'.indexOf('м', -5) поверне 3, оскільки метод почне пошук з позициї 0, а м знайдеться на позиції 3. З іншого боку, 'всім привіт'.indexOf('м', 11) (і з будь-яким значенням fromIndex, більшим за 11) поверне -1, оскільки пошук починається з позиції 11, позиції після кінця рідка.

Вертає

Індекс першого знайденого збігу з searchValue, або -1, якщо жодного збігу не знайдено.

Порожній рядок searchValue призводить до дивних результатів. За відсутності значення fromIndex, чи будь-якого значення fromIndex, нижчого за довжину рядка, повернене значення буде таким самим, як значення fromIndex:

'всім привіт'.indexOf('')    // вертає 0
'всім привіт'.indexOf('', 0) // вертає 0
'всім привіт'.indexOf('', 3) // вертає 3
'всім привіт'.indexOf('', 8) // вертає 8

Однак, якщо значення fromIndex є рівним або більшим за довжину рядка, повернене значення дорівнює довжині рядка:

'всім привіт'.indexOf('', 11) // вертає 11
'всім привіт'.indexOf('', 13) // вертає 11
'всім привіт'.indexOf('', 22) // вертає 11

В минулій версії JS порожній рядок відшукувався одразу після вказаного значення індексу. У останній версії JS порожній рядок буде знайдений в кінці рядка, в якому здійснюється пошук.

Опис

Символи рядка індексуються зліва направо. Індекс першого символу дорівнює 0, а індекс останнього символу рядка stringName дорівнює stringName.length - 1.

'Непозбувна бентега'.indexOf('Непозбувна');     // вертає  0
'Непозбувна бентега'.indexOf('Непозбувний');    // вертає -1
'Непозбувна бентега'.indexOf('бентега', 0);     // вертає 11
'Непозбувна бентега'.indexOf('бентега', 5);     // вертає 11
'Непозбувна бентега'.indexOf('бентега', 12);    // вертає -1
'Розкішниця'.indexOf('');                       // вертає  0
'Розкішниця'.indexOf('', 9);                    // вертає  9
'Розкішниця'.indexOf('', 10);                   // вертає 10
'Розкішниця'.indexOf('', 11);                   // вертає 10

Метод indexOf() є регістрозалежним. Наприклад, вираз нижче повертає -1:

'Непозбувна бентега'.indexOf('Бентега');  // вертає -1

Перевірка наявності підрядка

Зважте на те, що 0 не обчислюється як true, а -1 не обчислюється як false. Отже, належить у явний спосіб порівнювати значення, що повертається методом indexOf(), зі значенням -1:

'Непозбувна бентега'.indexOf('бентега') !== -1;  // true
'Непозбувна бентега'.indexOf('Бентега') !== -1; // false
~('Непозбувна бентега'.indexOf('Непозбувний')) // 0, тобто, хибне значення

Приклади

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

Наступний приклад використовує indexOf(), щоб знайти значення у рядку "абабагаламага".

const str = 'абабагаламага'

console.log('Індекс першої г з початку дорівнює ' + str.indexOf('г'))   // виводить 5
console.log('Індекс "баба" з початку дорівнює ' + str.indexOf('баба'))   // виводить 1

Регістрозалежність метода indexOf()

В цьому прикладі наведено два текстових рядки.

Їх вміст є майже однаковим, але у myCapString слова починаються з великої літери. Перший метод console.log() виводить 13. Але, через те, що метод indexOf() чутливий до регістру, рядок "камамбер" не знаходиться у myCapString, а отже, другий метод console.log() виводить -1.

var myString = 'брі, дорблю, камамбер';
var myCapString = 'Брі, Дорблю, Камамбер';

console.log('myString.indexOf("камамбер") дорівнює ' + myString.indexOf('камамбер'))
// виводить 13
console.log('myCapString.indexOf("камамбер") дорівнює ' + myCapString.indexOf('камамбер'))
// виводить -1

Використання indexOf() для підрахунку кількості вживань літери у рядку

Наступний приклад присвоює змінній count число вживать літери с у рядку str:

const str = 'Буває, часом сліпну від краси.'
let count = 0
let position = str.indexOf('с')

while (position !== -1) {
  count++
  position = str.indexOf('с', position + 1)
}

console.log(count)  // виводить 3

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

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

Підтримка веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
indexOfChrome 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 Yes

Legend

Full support  
Full support

Див. також