JavaScript

Можно ли проверить строку на наличие элементов?

Html + JS.
Есть строка div с классом и id'шником. В строке появляется значение по нажатию на кнопку. Такой вопрос, можно ли, с помощью js как-то проверить, есть ли в этой строке значение и, если есть, заменить потом его с помощью innerHTML?
<div class="x" id="y"></div>
Способов, на самом деле, достаточно много:

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, который так же могут быть использованы для проверки, но это уже совсем другая история.
Евгений Горбатовский
Евгений Горбатовский
367
Лучший ответ