Как сделать поиск подстроки в JavaScript нечувствительным к регистру

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для осуществления поиска текста в строке без учета регистра вы можете использовать методы .toLowerCase() или .toUpperCase() в сочетании с .includes():

JS
Скопировать код
let содержит = "JavaScript".toLowerCase().includes("script".toLowerCase());
// вернёт true

Благодаря приведению сравниваемых строк к общему регистру, данный подход становится универсальным и позволяет .includes() опустить различия в написании букв.

Кинга Идем в IT: пошаговый план для смены профессии

Различные методы поиска

Надёжный RegExp в JavaScript

Для обеспечения более гибкого поиска можно применять регулярные выражения с флагом i, который снимает учет регистра:

JS
Скопировать код
let pattern = /script/i;
let содержитRegEx = pattern.test("JavaScript");
// вернёт true

Универсальная функция indexOfInsensitive

Чтобы избежать повторов, можно создать функцию для регистронезависимого поиска:

JS
Скопировать код
function indexOfInsensitive(где_искать, что_искать) {
  return где_искать.toLowerCase().indexOf(что_искать.toLowerCase()) !== -1;
}

Метод includes для быстрого поиска

Метод .includes() более предпочтителен, чем .indexOf(), для проверки наличия подстроки, так как он возвращает логическое значение и проще в использовании:

JS
Скопировать код
let содержитIncludes = "JavaScript".includes("script");
// вернёт true

Производительность методов

Регулярные выражения могут быть обременительными в случае работы с большими текстами или при выполнении множество поисковых запросов. В таких ситуациях более эффективно использовать методы строки.

Визуализация

Представьте, что вы ищете книги в библиотеке с названиями, написанными в различной форме и регистре, при этом игнорируя регистр:

Markdown
Скопировать код
📚🔍 Поиск: 'javascript'

Вот как функционирует регистронезависимый поиск:

JS
Скопировать код
const названияКниг = ['JavaScript', 'JAVASCRIPT', 'javascript', 'Java'];
const искомоеСлово = 'javascript';
const соответствущиеНазвания = названияКниг.filter(название =>
  название.toUpperCase() === искомоеСлово.toUpperCase());

Результат:

Markdown
Скопировать код
Найденные совпадения: ['JavaScript', 'JAVASCRIPT', 'javascript']

RegExp: поиск с полным набором удобств

Переиспользование шаблонов с RegExp

Создайте фабрику для RegExp, чтобы переиспользовать одни и те же паттерны:

JS
Скопировать код
function createCaseInsensitiveRegexp(str) {
  return new RegExp(str, 'i');
}

const pattern = createCaseInsensitiveRegexp('script');

Удобный метод test()

Метод test() предоставляет быстрый ответ в формате "да" или "нет":

JS
Скопировать код
let этоMatch = createCaseInsensitiveRegexp('script').test("JavaScript");
// вернёт true

Осторожно с расширением прототипов

Расширение встроенных прототипов приносит удобство, но важно быть бдительными, чтобы избежать конфликтов:

JS
Скопировать код
String.prototype.includesCaseInsensitive = function(искомаяСтрока) {
  return this.toLowerCase().includes(искомаяСтрока.toLowerCase());
};

Совершенствуйте код с помощью новых возможностей

Работаем со спецсимволами в Regex

С помощью Regex можно эффективно искать спецсимволы:

JS
Скопировать код
let содержитСпецСимволы = /[@#]/i.test('Привет#Мир');
// вернёт true

Равное внимание к регистру

Преобразование всех строк к одному регистру облегчит их сравнение:

JS
Скопировать код
let одинаковыйРегистр = 'JavaScript'.toLowerCase() === 'JAVAscript'.toLowerCase();
// вернёт true

Код в порядке и чистоте

Рефакторинг общих задач в методы или функции сделает ваш код более аккуратным и понятным.

Полезные материалы

  1. String.prototype.includes() – JavaScript | MDN – документация метода String.includes().
  2. String.prototype.toLowerCase() – JavaScript | MDN – подробности о преобразовании строк в нижний регистр.
  3. String.prototype.toUpperCase() – JavaScript | MDN – особенности преобразования строк в верхний регистр.
  4. javascript – Как сравнивать строки, не принимая во внимание регистр? – Stack Overflow – дебаты о сравнении строк без учета регистра.
  5. Сравнения – обзор методов сравнения строк, в том числе с учетом регистра.
  6. RegExp.prototype.test() – JavaScript | MDN – описание метода test у класса RegExp.
  7. Как использовать регулярные выражения в JavaScript – применение регулярных выражений для поиска без учета регистра в JavaScript.