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.

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

BCD tables only load in the browser

Див. також