Программирование регулярных выражений
Регулярные выражения в JScript можно использовать для поиска шаблонов в строке, замены текста и извлечения подстрок.
Поиск
Следующий пример JScript находит все вхождения слова.
Регулярное выражение создается инструкцией
var re = /\w+/g;
Шаблон /\w+/ указывает сопоставить один или несколько любых символов из числа следующих: A-Z, a-z, 0-9 и символ подчеркивания. Глобальный флаг g, следующий за шаблоном, указывает, что следует найти все вхождения шаблона, а не только первое вхождение.
Можно также использовать следующий альтернативный синтаксис JScript.
var re = new RegExp("\\w+", "g");
Чтобы извлечь все соответствия, Метод exec продолжает поиск, начиная с позиции lastIndex и пока не будет возвращено значение null.
function SearchGlobal()
{
var src = "The quick brown fox jumps over the lazy dog.";
// Create a regular expression pattern that has a global flag.
var re = /\w+/g;
var result;
// Get the first match.
result = re.exec(src);
while (result != null)
{
print (result.index + "-" + result.lastIndex + "\t" + result[0]);
// Get the next match.
// Because the global flag is set, the search starts at the
// position of lastIndex.
result = re.exec(src);
}
// Output:
// 0-3 The
// 4-9 quick
// 10-15 brown
// 16-19 fox
// 20-25 jumps
// 26-30 over
// 31-34 the
// 35-39 lazy
// 40-43 dog
}
Следующий пример находит лишь первое соответствие. Поскольку глобальный флаг (g) не установлен, поиск начинается с начала строки поиска.
function SearchNonGlobal()
{
var src = "The quick brown fox jumps over the lazy dog.";
// Create a regular expression that does not have
// a global flag.
var re = /\w+/;
// Get the first match.
// Because the global flag is not set, the search starts
// from the beginning of the string.
var result = re.exec(src);
if (result == null)
print ("not found");
else
{
print (result.index + "-" + result.lastIndex + "\t" + result[0]);
}
// Output:
// 0-3 The
}
Замена
В следующем примере вхождения "the" заменены на "a". Единичное вхождение "The" не заменено, поскольку флаг i (не учитывать регистр) не включен в регулярное выражение.
В примере используется метод Метод replace.
function ReplaceGlobal()
{
var src = "The batter hit the ball with the bat ";
src += "and the fielder caught the ball with the glove.";
// Replace "the" with "a".
var re = /the/g;
var result = src.replace(re, "a");
print(result);
// Output:
// The batter hit a ball with a bat and a fielder caught a ball with a glove.
}
Извлечение подстрок
Добавление круглых скобок в шаблон регулярного выражения создает подстроку соответствия, которую можно сохранить для последующего использования.
В следующем примере шаблон включает три подстроки соответствия. Строки частичного соответствия отображаются вместе с каждым соответствием.
Метод exec возвращает массив. Нулевой элемент массива содержит соответствие целиком, а элементы с 1 по n содержат подстроки соответствия.
function SearchWithSubmatches()
{
var result;
var src = "Please send mail to george@contoso.com and someone@example.com. Thanks!";
// Create a regular expression to search for an e-mail address.
// Include the global flag.
// (More sophisticated RegExp patterns are available for
// matching an e-mail address.)
var re = /(\w+)@(\w+)\.(\w+)/g;
// Get the first match.
result = re.exec(src);
while (result != null)
{
print ("e-mail address: " + result[0]);
// Get the submatched parts of the address.
print ("user name: " + result[1]);
print ("host name: " + result[2]);
print ("top-level domain: " + result[3]);
print ("");
// Get the next match.
result = re.exec(src);
}
// Output:
// e-mail address: george@contoso.com
// user name: george
// host name: contoso
// top-level domain: com
// e-mail address: someone@example.com
// user name: someone
// host name: example
// top-level domain: com
}
Флаги
В регулярном выражении JScript /abc/gim элемент g задает глобальный флаг, i — флаг "не учитывать регистр", а m — флаг многострочности.
В следующей таблице отображены разрешенные флаги.
Флаг JScript |
Если флаг присутствует |
---|---|
g |
Найти все вхождения шаблона в строке, в которой ведется поиск, а не только первое вхождение |
i |
При поиске регистр не учитывается. |
m |
^ сопоставляет позиции после \n или \r, и $ сопоставляет позиции перед \n или \r. Независимо от присутствия флага, ^ сопоставляет позицию в начале, а $ — в конце строки, в которой ведется поиск. |
Дополнительные возможности
Доступны следующие дополнительные функции программирования.
Функция |
Описание |
---|---|
Выполняет компиляцию регулярного выражения во внутренний формат для более быстрого выполнения |
|
Проверяет, встречается ли шаблон в строке, в которой ведется поиск |
|
Возвращает позицию первого соответствия |