Referências anteriores em JScript
Referências anteriores são usados para localizar grupos de caracteres de repetição. Eles também são usados para reformatar uma seqüência de caracteres de entrada, reorganizando a ordem e o posicionamento dos elementos na seqüência de entrada.
Você pode consultar uma subexpressão de dentro de uma expressão regular e a partir uma seqüência de caracteres de substituição. Cada subexpressão é identificado pelo número e é conhecido como referência anterior.
Uma expressão regular dos parênteses são usados para criar uma subexpressão. A submatch resultante pode ser recuperada pelo programa. Para obter mais informações, consulte Alternação e subexpressões.
Utilizando referências anteriores
Você pode consultar uma subexpressão a partir de uma expressão regular.
Uma expressão regular, cada submatch salva é armazenada como ele é encontrado da esquerda para a direita. Os números de buffer no qual os subcorrespondentes são armazenados começam com 1 e continuam até um máximo de 99 subexpressões. Dentro da expressão regular, você pode acessar cada buffer usando \n, onde n é um ou dois dígitos decimais, identificando um buffer específico.
Um aplicativo de referências anteriores fornece a capacidade de localizar a ocorrência de duas palavras idênticas juntos no texto. Execute a seguinte frase: Is is the cost of of gasoline going up up?
Esta sentença contém várias palavras duplicadas. Seria útil imaginar uma maneira para corrigir a sentença sem ter de procurar por duplicatas de cada palavra. A seguinte expressão regular de JScript usa uma subexpressão única para fazer isso.
/\b([a-z]+) \1\b/gi
Nesse caso, a subexpressão é tudo entre parênteses. Esse subexpressão inclui um ou mais caracteres alfabéticos, conforme especificado pelo [a-z]+. A segunda parte da expressão regular é a referência para o submatch salvo anteriormente, ou seja, a segunda ocorrência da palavra apenas correspondida pela expressão entre parênteses. \1é usado para especificar o primeiro submatch.
O \b metacaracteres de limite de palavra certificar-se de que as palavras separadas somente são detectadas. Caso contrário, uma frase como "é emitida" ou "this is" seria incorretamente identificado por essa expressão.
O exemplo a seguir lista as palavras duplicadas. Ele mostra como correspondências e subcorrespondentes podem ser recuperadas no código.
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
Você também pode consultar uma subexpressão a partir de uma seqüência de caracteres de substituição.
Usando a expressão regular, mostrada acima, o exemplo a seguir substitui uma ocorrência de duas palavras de idênticas consecutivas com uma única ocorrência da mesma palavra. No Substituir método, $1 se refere à primeira salvo submatch. Se houver mais de um submatch, você consultá-las consecutivamente como $2, $3e assim por diante.
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?
O exemplo a seguir troca cada par de palavras na seqüência de caracteres.
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.