Как найти позицию подстроки
Короткий ответ
indexOf() возвращает позицию первого совпадения, считая с нуля, или -1, если ничего не найдено:
const text = 'hello world';
console.log(text.indexOf('o'));
console.log(text.indexOf('x'));Результат:
4
-1Последнее совпадение
lastIndexOf() ищет с конца:
console.log('hello world'.lastIndexOf('o'));Результат:
7Все позиции
Второй аргумент indexOf() задаёт, откуда начинать поиск. Цикл находит все совпадения:
const text = 'banana';
const positions = [];
let index = text.indexOf('a');
while (index !== -1) {
positions.push(index);
index = text.indexOf('a', index + 1);
}
console.log(positions.join(', '));Результат:
1, 3, 5С регулярным выражением
search() работает как indexOf(), но принимает шаблон:
console.log('Room 42'.search(/\d/));Результат:
5Частая ошибка
Позиция 0 — правильный результат, но она ложна. Всегда сравнивайте с -1:
const text = 'apple pie';
console.log(text.indexOf('apple') ? 'found' : 'not found');
console.log(text.indexOf('apple') !== -1 ? 'found' : 'not found');Результат:
not found
foundФункции из этого ответа
- String.prototype.indexOf — Находит позицию первого вхождения подстроки.
- String.prototype.lastIndexOf — Ищет последнее вхождение текста в строке.
- String.prototype.search — Возвращает позицию первого совпадения с регулярным выражением.