Обратные ссылки в JScript

Обратные ссылки служат для поиска повторяющихся групп символов. Они также используются для переформатирования строки ввода путем изменения порядка и размещения элементов строки ввода.

К части выражения можно обратиться из регулярного выражения и из строки замены. Каждая часть выражения идентифицируется номером и считается обратной ссылкой.

Круглые скобки в регулярном выражении используются для создания частей выражения. Результирующая подстрока совпадения может быть извлечена программой. Дополнительные сведения см. в разделе Чередование и части выражений.

Использование обратных ссылок

К части выражения можно обратиться из регулярного выражения.

В регулярном выражении каждая определенная подстрока сохраняется слева направо в том виде, в котором она была найдена. Номера буферов, в которых сохраняются найденные подстроки, начинаются с единицы и продолжаются до 99. Доступ к каждому буферу из регулярного выражения осуществляется с помощью \n, где n — это одна или две десятичные цифры, задающие номер соответствующего буфера.

Одно из применений обратных ссылок заключается в возможности обнаружения в тексте двух расположенных рядом одинаковых слов. Прочитайте следующее предложение:Is is the cost of of gasoline going up up?

Это предложение содержит несколько повторяющихся слов. Было бы удобно найти способ исправления этого предложения без поиска повторений для каждого отдельного слова. В следующем регулярном выражении JScript для этого используется отдельная часть выражения.

/\b([a-z]+) \1\b/gi

В данном контексте частью выражения называется любая последовательность знаков, заключенная в круглые скобки. Часть выражения соответствует одной или нескольким латинским буквам, на что указывает [a-z]+. Вторая часть регулярного выражения является ссылкой на ранее сохраненное частичное совпадение, то есть второе вхождение слова, соответствующее выражению в скобках. Ссылка \1 используется для указания на первую подстроку найденного соответствия.

Метасимволы границы слова \b позволяют искать только отдельные слова. В противном случае данное выражение неверно определит такие фразы как "is issued" или "this is".

Следующий пример выводит список дублирующихся слов. В нем показано, как в коде ссылаться на соответствия и подстроки соответствия.

var result;

var re = /\b([a-z]+) \1\b/gi
var src = "Is is the cost of of gasoline going up up?"

// Get the first match.
result = re.exec(src);

while (result != null)
{
    // Show the entire match.
    print();
    print(result[0]);

    // Show the submatches.
    for (var index = 1; index < result.length; index++)
    {
        print("submatch " + index + ": " + result[index]);
    }

    // Get the next match.
    result = re.exec(src);
}

// Output:
//  Is is
//  submatch 1: Is

//  of of
//  submatch 1: of

//  up up
//  submatch 1: up

К части выражения можно обратиться из строки замены.

С помощью приведенного выше регулярного выражения код следующего примера может заменить вхождения двух последовательных одинаковых слов в текстовой строке на одно вхождение этого слова. В методе replace $1 указывает на первую сохраненную подстроку соответствия. При наличии нескольких подстрок соответствия необходимо обращаться к ним последовательно: $2, $3 и т. д.

var re = /\b([a-z]+) \1\b/gi
var src = "Is is the cost of of gasoline going up up?"
var result = src.replace(re, "$1");
print(result);
// Output:
//  Is the cost of gasoline going up?

В следующем примере меняются местами все пары слов в строке.

var re = /(\S+)(\s+)(\S+)/gi
var src = "The quick brown fox jumps over the lazy dog."
var result = src.replace(re, "$3$2$1");
print(result);
// Output:
//  quick The fox brown over jumps lazy the dog.

См. также

Ссылки

Метод replace

Основные понятия

Чередование и части выражений

Другие ресурсы

Знакомство с регулярными выражениями