Selecione Permitir que o personagem '|' 'selecione entre dois ou mais candidatos. Ao estender a expressão regular do título do capítulo, ele pode ser expandido para uma expressão que se aplica mais do que apenas ao título do capítulo. No entanto, isso não é tão direto quanto o esperado. Ao usar a seleção, a expressão mais provável para cada lado do caractere '|' será correspondente. Você pode pensar que as seguintes expressões JScript e VBScript corresponderão ao 'capítulo' ou 'seção' nas posições iniciais e finais de uma linha e seguidas por um ou dois números:
/^Chapter|Section [1-9][0-9]{0,1}$/ ^Chapter|Section [1-9][0-9]{0,1}___FCKpd___0quot;Infelizmente, o caso real é que a expressão regular mostrada acima corresponde à palavra 'capítulo' no início de uma linha ou corresponde à 'seção' no final de uma linha seguida por qualquer número. Se a sequência de entrada for 'Capítulo 22', a expressão acima corresponderá apenas à palavra 'capítulo'. Se a sequência de entrada for 'Seção 22', a expressão corresponderá à 'Seção 22'. Mas esse resultado não é o nosso propósito aqui, então deve haver uma maneira de tornar as expressões regulares mais receptivas ao que elas farão, e existe de tal maneira.
Os parênteses podem ser usados para limitar o intervalo de opções, ou seja, fica claro que a opção se aplica apenas ao "capítulo" e "seção" e "seção". No entanto, também são difíceis de lidar com parênteses, porque também são usados para criar subexpressões, e alguns serão introduzidos posteriormente na seção sobre subexpressões. Ao tomar a expressão regular mostrada acima e adicionar parênteses no local apropriado, a expressão regular pode ser feita para corresponder ao 'Capítulo 1' e 'Seção 3'.
A expressão regular a seguir usa parênteses para agrupar o 'capítulo' e a 'seção' para que a expressão funcione corretamente. Para JScript:
/^(Chapter|Section) [1-9][0-9]{0,1}$/Para VBScript:
^(Chapter|Section) [1-9][0-9]{0,1}___FCKpd___2quot;Essas expressões funcionam corretamente e apenas produzem um subproduto interessante. A colocação de parênteses em ambos os lados do 'Capítulo | Seção' cria um agrupamento apropriado, mas também faz com que uma das duas palavras seja correspondida para ser capturada para uso futuro. Como existe apenas um conjunto de parênteses na expressão mostrada acima, pode haver apenas um envio capturado. Este envio pode ser referenciado usando a coleção de envios do VBScript ou os atributos de US $ 1 a US $ 9 do objeto regexp no JScript.
Às vezes, capturar um sub-match é desejável, às vezes indesejável. No exemplo mostrado na descrição, o que você realmente deseja fazer é usar parênteses para agrupar a escolha entre as palavras 'capítulo' ou 'seção'. Não é desejável se referir à partida mais tarde. De fato, não use, a menos que você realmente precise capturar o sub-match. Essa expressão regular será mais eficiente porque não requer tempo e memória para armazenar esses sub-matches.
Você pode usar '?:' Em frente aos parênteses do padrão de expressão regular para evitar o armazenamento desta correspondência para uso futuro. As modificações a seguir para a expressão regular mostrada acima fornecem a mesma funcionalidade que elimina o armazenamento de envio. Para JScript:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/Para VBScript:
^(?:Chapter|Section) [1-9][0-9]{0,1}___FCKpd___4quot;Além do '?:' Metacharacter, existem dois metacaracters não capturados usados para correspondências chamadas pré-verificações . Uma pré-verificação para a frente é representada por? =, Onde o padrão de expressão regular entre parênteses começa a corresponder à sequência de pesquisa. Uma pré-verificação negativa é indicada por '?!'
Por exemplo, suponha que exista um documento que contenha referências ao Windows 3.1, Windows 95, Windows 98 e Windows NT. Supondo ainda que o documento precise ser atualizado procurando todas as referências ao Windows 95, Windows 98 e Windows NT e alterando essas referências ao Windows 2000. Você pode usar a seguinte expressão regular do JScript, que é uma pré-verificação para a frente para corresponder ao Windows 95, Windows 98 e Windows NT:
/Windows(?=95 |98 |NT )/ Para fazer a mesma correspondência no VBScript, você pode usar a seguinte expressão: Windows(?=95 |98 |NT )
Depois que uma correspondência é encontrada, a próxima pesquisa de partida começa imediatamente após o texto correspondente (sem incluir os caracteres usados no pré-exame). Por exemplo, se a expressão mostrada acima corresponder ao 'Windows 98', a pesquisa continuará no 'Windows' em vez de '98'.
Uma das características mais importantes das expressões regulares é a capacidade de armazenar uma parte do padrão de sucesso correspondente para uso posterior. Lembre -se de que a adição de parênteses a ambos os lados de um padrão de expressão regular ou padrão parcial fará com que a expressão parcial seja armazenada em um buffer temporário. Os metacaracos que não capturam '?:', '? =', Ou '?!'
Cada envio capturado é armazenado como o conteúdo encontrado da esquerda para a direita no padrão de expressão regular. O número do buffer que armazena sub-matches começa em 1 e é numerado consecutivamente até as subexpressões máximas de 99. Cada buffer pode ser acessado usando '/ n ', onde n é um número decimal de um ou dois dígitos que identifica um buffer específico.
Citação para trás Uma das aplicações mais fáceis e mais úteis é a capacidade de determinar onde duas palavras idênticas aparecem em um texto em sucessão. Por favor, veja a seguinte frase:
Is is the cost of of gasoline going up up?De acordo com o conteúdo escrito, a frase acima obviamente tem o problema de palavras repetidas repetidamente. Seria ótimo se houvesse uma maneira de modificar a frase sem procurar a repetição de cada palavra. A seguinte expressão regular JScript pode alcançar essa função usando uma subexpressão.
//b([az]+) /1/b/giA expressão equivalente a VBScript é:
/b([az]+) /1/bNeste exemplo, a subexpressão é cada item entre parênteses. A expressão capturada inclui um ou mais caracteres alfabéticos, isto é, especificados por '[AZ]+'. A segunda parte da expressão regular é uma referência ao sub-match previamente capturado, ou seja, a segunda ocorrência da palavra correspondente pela expressão adicional. '/1' é usado para especificar o primeiro envio. Os caracteres do elemento de limite da palavra garantem que apenas palavras individuais sejam detectadas. Caso contrário, frases como a emitida ou isso serão reconhecidas incorretamente pela expressão.
Em uma expressão JScript, o sinalizador global ('g') seguindo a expressão regular significa que a expressão será usada para encontrar o maior número possível de correspondências na sequência de entrada. A sensibilidade ao caso é especificada pela marca de sensibilidade do caso ('i') no final da expressão. As tags de várias linhas especificam correspondências em potencial que podem aparecer nas duas extremidades de um caractere de nova linha. Para o VBScript, várias tags não podem ser definidas em expressões, mas devem ser definidas explicitamente usando as propriedades do objeto regexp .
Usando a expressão regular mostrada acima, o código JScript a seguir pode substituir a mesma palavra que aparece duas vezes em uma string literal com a mesma palavra usando informações sub-match:
var ss = Is is the cost of of gasoline going up up?./n; var re = //b([az]+) /1/b/gim; //. var rv = ss.replace(re,$1); //re, $ 1.. var rv = ss.replace(re,$1); //
O código VBScript equivalente mais próximo é o seguinte:
Dim ss, re, rv ss = Is is the cost of of gasoline going up up?. & vbNewLine Set re = New RegExp re.Pattern = /b([az]+) /1/b re.Global = True re.IgnoreCase = True re.MultiLine = True rv = re.Replace(ss,$1)Observe que no código VBScript, global, sensibilidade de casos e tags de várias linhas são definidas usando propriedades apropriadas do objeto regexp .
Use $ 1 no método de substituição para fazer referência ao primeiro envio salvo. Se houver vários sub-matches, você poderá continuar referenciando com US $ 2 , US $ 3, etc.
Outro uso de referências atrasadas é quebrar um indicador de recurso comum (URI) em partes componentes. Suponha que você queira decompor o seguinte URI em protocolos (FTP, HTTP, etc), endereço de nome de domínio e página/caminho:
http://msdn.microsoft.com:80/scripting/default.htmAs seguintes expressões regulares podem fornecer essa função. Para JScript, como:
/(/w+):////([^/:]+)(:/d*)?([^# ]*)/Para VBScript:
(/w+):////([^/:]+)(:/d*)?([^# ]*)A primeira subexpressão adicional é usada para capturar a parte do protocolo do endereço da Web. Essa subexpressão corresponde a qualquer palavra localizada antes de um cólon e duas barras para a frente. A segunda subexpressão adicional captura o endereço de nome de domínio desse endereço. Essa subexpressão corresponde a qualquer sequência de caracteres que não inclua '^', '/' ou ':' caracteres. A terceira subexpressão adicional captura o número da porta do site se o número da porta for especificado. Essa subexpressão corresponde a zero ou mais números seguidos por um cólon. Finalmente, a quarta subexpressão adicional captura o caminho especificado pelo endereço da Web e/ou informações da página. Essa subexpressão corresponde a um e vários caracteres, exceto '#' ou espaço.
Depois de aplicar essa expressão regular ao URI mostrado acima, o sub-match contém o seguinte:
Regexp. $ 1 contém http
Regexp. $ 2 contém msdn.microsoft.com
Regexp. $ 3 inclui: 80
Regexp. $ 4 contém /scripting/default.htm