- •Регулярные выражения
- •Объект RegExp
- •Спецсимволы в регулярном выражении
- •Проверка результатов: метод test
- •Поиск совпадений: метод exec
- •Строковые методы, поиск и замена
- •Метод search(regexp)
- •Метод match(regexp)
- •Замена, replace
- •Спецсимволы в строке замены
- •Замена через функцию
- •Статичные регэкспы
Проверка результатов: метод test
Чтобы просто проверить, подходит ли строка под регулярное выражение, используется метод test:
if ( /\s/.test("строка") ) { |
|
...В строке есть пробелы!... |
|
} |
Метод test начинает поиск, начиная со свойства lastIndex объекта RegExp, если оно установлено.
Поиск совпадений: метод exec
Метод exec возвращает массив и ставит свойства регулярного выражения. Если совпадений нет, то возвращается null.
Например,
1 |
// Найти одну d, за которой следует 1 или более b, за которыми одна d |
|
2 |
// Запомнить найденные b и следующую за ними d |
|
3 |
// Регистронезависимый поиск |
|
4 |
var myRe = /d(b+)(d)/ig; |
|
5 |
var myArray = myRe.exec("cdbBdbsbz"); |
В результате выполнения скрипта будут такие результаты:
Объект |
Свойство/Индекс |
Описания |
Пример |
myArray |
|
Содержимое myArray. |
["dbBd", "bB", "d"] |
index |
Индекс совпадения (от 0) |
1 |
|
input |
Исходная строка. |
cdbBdbsbz |
|
[0] |
Последние совпавшие символы |
dbBd |
|
[1], ...[n] |
Совпадения во вложенных скобках, если есть. Число вложенных скобок не ограничено. |
[1] = bB [2] = d |
|
myRe |
lastIndex |
Индекс, с которого начинать следующий поиск. |
5 |
ignoreCase |
Показывает, что был включен регистронезависимый поиск, флаг "i". |
true |
|
global |
Показывает, что был включен флаг "g" поиска всех совпадений. |
true |
|
multiline |
Показывает, был ли включен флаг многострочного поиска "m". |
false |
|
source |
Текст паттерна. |
d(b+)(d) |
Если в регулярном выражении включен флаг "g", Вы можете вызывать метод execмного раз для поиска последовательных совпадений в той же строке. Когда Вы это делаете, поиск начинается на подстроке str, с индекса lastIndex. Например, вот такой скрипт:
1 |
var myRe = /ab*/g; |
|
2 |
var str = "abbcdefabh"; |
|
3 |
while ((myArray = myRe.exec(str)) != null) { |
|
4 |
var msg = "Found " + myArray[0] + ". "; |
|
5 |
msg += "Next match starts at " + myRe.lastIndex; |
|
6 |
print(msg); |
|
7 |
} |
Этот скрипт выведет следующий текст:
Found abb. Next match starts at 3 |
|
Found ab. Next match starts at 9 |
|
В следующем примере функция выполняет поиск по input. Затем делается цикл по массиву, чтобы посмотреть, есть ли другие имена.
Предполагается, что все зарегистрированные имена находятся в массиве А:
01 |
var A = ["Frank", "Emily", "Jane", "Harry", "Nick", "Beth", "Rick", |
|
02 |
"Terrence", "Carol", "Ann", "Terry", "Frank", "Alice", "Rick", |
|
03 |
"Bill", "Tom", "Fiona", "Jane", "William", "Joan", "Beth"]; |
|
04 |
|
|
05 |
function lookup(input) |
|
06 |
{ |
|
07 |
var firstName = /\w+/i.exec(input); |
|
08 |
if (!firstName) |
|
09 |
{ |
|
10 |
print(input + " isn't a name!"); |
|
11 |
return; |
|
12 |
} |
|
13 |
|
|
14 |
var count = 0; |
|
15 |
for (var i = 0; i < A.length; i++) |
|
16 |
{ |
|
17 |
if (firstName[0].toLowerCase() == A[i].toLowerCase()) |
|
18 |
count++; |
|
19 |
} |
|
20 |
var midstring = (count == 1) ? " other has " : " others have "; |
|
21 |
print("Thanks, " + count + midstring + "the same name!") |
|
22 |
} |
|
