- •Регулярные выражения
- •Объект RegExp
- •Спецсимволы в регулярном выражении
- •Проверка результатов: метод test
- •Поиск совпадений: метод exec
- •Строковые методы, поиск и замена
- •Метод search(regexp)
- •Метод match(regexp)
- •Замена, replace
- •Спецсимволы в строке замены
- •Замена через функцию
- •Статичные регэкспы
Строковые методы, поиск и замена
Следующие методы работают с регулярными выражениями из строк.
Все методы, кроме replace, можно вызывать как с объектами типа regexp в аргументах, так и со строками, которые автоматом преобразуются в объекты RegExp.
Так что вызовы эквивалентны:
var i = str.search(/\s/) |
|
var i = str.search("\\s") |
|
При использовании кавычек нужно дублировать \ и нет возможности указать флаги. Если регулярное выражение уже задано строкой, то бывает удобна и полная форма
var regText = "\\s" |
|
var i = str.search(new RegExp(regText, "g")) |
|
Метод search(regexp)
Возвращает индекс регулярного выражения в строке, или -1.
Если Вы хотите знать, подходит ли строка под регулярное выражение, используйте метод search(аналогично RegExp-методы test). Чтобы получить больше информации, используйте более медленный метод match(аналогичный методу RegExp exec).
Этот пример выводит сообщение, в зависимости от того, подходит ли строка под регулярное выражение.
1 |
function testinput(re, str){ |
2 |
if (str.search(re) != -1) |
3 |
midstring = " contains "; |
|
4 |
else |
|
5 |
midstring = " does not contain "; |
|
6 |
document.write (str + midstring + re.source); |
|
7 |
} |
Метод match(regexp)
Если в regexp нет флага g, то возвращает тот же результат, чтоregexp.exec(string).
Если в regexp есть флаг g, то возвращает массив со всеми совпадениями.
Чтобы просто узнать, подходит ли строка под регулярное выражение regexp, используйте regexp.test(string).
Если Вы хотите получить первый результат - попробуйте regexp.exec(string).
В следующем примере match используется, чтобы найти "Chapter", за которой следует 1 или более цифр, а затем цифры, разделенные точкой. В регулярном выражении есть флаг i, так что регистр будет игнорироваться.
1 |
str = "For more information, see Chapter 3.4.5.1"; |
|
2 |
re = /chapter (\d+(\.\d)*)/i; |
|
3 |
found = str.match(re); |
|
4 |
alert(found); |
|
Скрипт выдаст массив из совпадений:
Chapter 3.4.5.1 - полностью совпавшая строка
3.4.5.1 - первая скобка
.1 - внутренняя скобка
Следующий пример демонстрирует использование флагов глобального и регистронезависимого поиска с match. Будут найдены все буквы от А до Е и от а до е, каждая - в отдельном элементе массива.
1 |
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; |
|
2 |
var regexp = /[A-E]/gi; |
|
3 |
var matches = str.match(regexp); |
|
4 |
document.write(matches); |
|
5 |
|
|
6 |
// matches = ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e'] |
|
