#javascript
Каким способом можно определить что в строке есть искомый текст? Перевод вопроса "How to check whether a string contains a substring in JavaScript?"
Ответы
Ответ 1
Способов, на самом деле, достаточно много: String#indexOf(str: String[, fromIndex: Number]): Number - один из старейших способов. Возвращает найденную позицию str или, если подстрока не найдена, -1. Параметр fromIndex определяет отступ поиска. Важно: В условии необходимо использовать сравнение и обязательно строгое: Без сравнения, -1 (отсутствие подстроки) трактуется как true. Может возвращать 0 (совпал первый символ), что приводится обычным сравнением к false. 'Hello, world!'.indexOf('world'); // 7 'Hello, world!'.indexOf('o'); // 4, в конце hello 'Hello, world!'.indexOf('o', 5); // 8, вторая буква в world !!'Hello, world!'.indexOf('z'); // true, отрицательное число приводится к true !!'Hello, world!'.indexOf('H'); // false, 0 трактуется как false String#search([regexp: RegExp]): Number - тот же String#indexOf, только с регулярным выражением и отсутствием смещения. "Date of birth of Einstein: 3/14/1879".search(/\d{4}/); // 32 String#includes(searchString: String[, position: Number]): Boolean - более кошерный вариант String#indexOf с двумя отличиями: Возвращает Boolean, вместо позиции, что может быть более ожидаемым. Работает быстрее. Однако разница ощутима только на весьма больших объёмах, проверить. 'Hello, world!'.includes('o'); // true, в конце hello 'Hello, world!'.includes('o', 9); // false, после девятого символа нет 'o' String#match(regexp: RegExp): Array | Null - String#search на стероидах (однако, медленнее). Возвращает немного модифицированный массив с найденной подстрокой, позицией совпадения (index) и свойством input - строкой, в котором проходил поиск или Null, если регулярка ничего не нашла. Опционально, в массиве могут быть захваченные группы. При использовании флага g, вернутся все найденный совпадения (правда без групп и особых свойств): "Date of birth of Einstein: 3/14/1879".match(/(\d{4})/); // [0: "1879", 1: "1879", index: 32, input: "Date of birth of Einstein: 3/14/1879", length: 2] `Date of birth of Einstein: 3/14/1879; Date of birth of Hendrik Lorentz: 7/18/1853`.match(/(\d)\/(\d{2})\/(\d{4})/g); // [0: "3/14/1879", 1: "7/18/1853", length: 2] Есть ещё методы RegExp#test или RegExp#exec, который так же могут быть использованы для проверки, но это уже совсем другая история.
Комментариев нет:
Отправить комментарий