Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Регулярные выражения JavaScript.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
210.43 Кб
Скачать

Проверка результатов: метод 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

}