Функции JavaScript
replace
Метод replace()
ищет строку для указанного значения или регулярного выражения и возвращает новую строку, где указанные
значения будут заменены.
где_искать.replace(#шаблон для поиска#, на что менять)
'bab'.replace('a', '!') ); // вернет 'b!b'
Если мы что-то положим в карман в регулярке, то в параметре на что заменить
мы можем обратиться к этому
карману так: $1
– первый карман, $2
второй карман и так далее. Карман $0
соответствует всему выражению.
где_искать.replace(#шаблон для поиска с карманом#, на что менять)
'aaa@bbb ссс@ddd'.replace(#([a-z]+)@([a-z]+)#g, '$2@$1') // вернет bbb@aaa ddd@ссс
replace карман
При работе с методом replace, если мы что-то положим в карман в регулярке, то в строке замены мы можем вставить
содержимое этого кармана написав знак доллара $ и номер кармана. Например, $1
- первый карман, $2
- второй карман и так далее.
'x1x x23x x456x xax'.replace(#x(\d+)x#g, '!$1!') // вернет !1! !23! !456! xax
В методе replace, помимо карманов с вашими номерами, всегда доступны также стандартные карманы: $&
- всё найденное
совпадение, $`
и $'
-часть строки до и после совпадения. Давайте посмотрим работу с ними на примерах.
'1 23 456'.replace(#\d+#g, '($&)') // вернет (1) (23) (456)
'123@456'.replace(#@#g, "($`@$')") // вернет 123(123@456)456
$`
часть строки до совпадения$'
часть строки после совпадения$&
- всё найденное совпадение (равно $0)$$
- знак доллара
match
Позволяет получить ту часть строки, которая попала под регулярное выражение. Этот метод работает по-разному в зависимости от того, есть модификатор g
или нет.
где_искать.match(#шаблон для поиска#)
match без модификатора g
Если вызвать метод match
без модификатора g
, то он найдет только первое совпадение с регуляркой. Однако, вернет он все равно массив - это будет массив, состоящий из найденного совпадения, с дополнительными свойствами:
index
– позиция, на которой оно обнаружено и input
– строка, в которой был поиск (в принципе последнее - бесполезная штука). А найденная подстрока будет лежать в нулевом элементе возвращенного массива.
let result = 'aaa bbb ccc'.match(#b+#);
alert(result[0]); // вернет 'bbb' - то, что попало под регулярку
alert(result.index); // вернет 4 - позиция начала 'bbb' в строке
alert(result.input); // вернет 'aaa bbb ccc' - исходную строку
match c модификатором g
Метод возвращает массив подстрок, которые попали под регулярное выражение.
'a aa aaa aaaa'.match(#a+#g); // вернет ['a', 'aa', 'aaa', 'aaaa']
match карман
Карманы представляют собой способ разбить найденное на отдельные части. Для их использования нужно заключить часть регулярки в круглые скобки. В этом случае в массиве с результатом кроме найденной строки также появится и то, что попало под регулярку, стоящую в этих скобках.
В следующем примере мы ищем строки по шаблону буквы x
, а между ними - от одной и более букв a
. При этом найденные
буквы a
попадут в карман:
let res = 'sss xaaax zzz'.match(#x(a+)x#);
console.log(res[0]); // выведет 'xaaax' - найденное
console.log(res[1]); // выведет 'aaa' - карман
test
Проверяет, есть ли в строке хотя бы одно совпадение с регуляркой. Если есть - возвращается true
, а если нет - false
.
#шаблон для поиска#.test(где_искать)
#a+#.test('eee aaa bbb'); // вернет true
Часто данный метод используется для проверки на соответствие регулярному выражению целой строки. Вначале регулярки ставим ^
, а в конце $
- этим мы говорим, что под шаблон должна попасть
вся строка. Если их не поставить - тогда мы скажем не "вся строка есть email", а "в строке есть email":
#^[a-zA-Z-.]+@[a-z]+\.[a-z]{2,3}$#.test('my-mail@mail.ru') // вернет true
Модификаторы методов | |
---|---|
g
|
Глобальный поиск, поиск и замена продолжатся даже после первого удачного совпадения |
i
|
Регистронезависимый поиск |
x
|
Регулярка перестанет учитывать пробелы |
m
|
Многострочный режим |
s
|
Однострочный режим |
U
|
Нежадный поиск, все операторы повторений станут нежадными, а '?', наоборот, будет добавлять им жадности |
u
|
Корректная работа с utf-8, ставьте его, чтобы не было проблем с кириллицей |
X
|
Экранировка обычного символа приведет к ошибке. Без него - обычные символы можно экранировать, они все равно будут обозначать сами себя (исключение: цифры, они станут карманами). |