Partilhar via


Alternação e subexpressões

Alternação em uma expressão regular permite que você entre dois ou mais alternativas de opções do grupo. Essencialmente, você pode especificar "este ou aquele" em um padrão.

Subexpressões permitem corresponder a um padrão no texto pesquisado e dividir a correspondência em subcorrespondentes separados. As subcorrespondentes resultantes podem ser recuperadas pelo programa. Subexpressões também permitem que você reformate o texto, conforme descrito em Referências anteriores em JScript.

Para obter mais informações sobre expressões regulares, consulte Criando uma expressão Regular e Sintaxe de expressão regular.

Alternação

Você pode usar o caractere de pipe (|) para especificar uma escolha entre dois ou mais alternativas. Isso é conhecido como alternação. A expressão maior possível em ambos os lados do caractere de pipe é correspondida. Você pode achar que o seguinte JScript expressão corresponde a "Chapter" ou "Seção" seguido por um ou dois dígitos.

/Chapter|Section [1-9][0-9]{0,1}/

Em vez disso, a expressão regular corresponde tanto a palavra "Chapter" ou a palavra "Seção" e seguem os números. Se a seqüência de caracteres pesquisada "Seção 22", a expressão corresponde a "Seção 22". No entanto, se a seqüência de caracteres pesquisada "Capítulo 22", a expressão corresponde a palavra "Chapter" em vez de correspondência de "Capítulo 22".

Alternação com parênteses

Você pode usar parênteses para limitar o escopo de alternação, ou seja, para certificar-se de que ele se aplica somente para as duas palavras "Chapter" e a "seção". Adicionando os parênteses, você pode tornar a expressão regular corresponde ao "Capítulo 1" ou "3".

Entre parênteses, entretanto, também são usados para criar uma subexpressão. A submatch resultante pode ser recuperada pelo programa.

O seguinte JScript expressão regular usa parênteses para o grupo "Chapter" e a "seção". Correspondências possíveis incluirão "Chapter" seguido por um número.

/(Chapter|Section) [1-9][0-9]{0,1}/

Os parênteses Chapter|Section também causar um das duas palavras correspondentes para ser salvo para uso futuro.

O exemplo a seguir mostra como as correspondências e subcorrespondentes podem ser recuperadas no código. Como há apenas um conjunto de parênteses na expressão, há apenas um submatch salvo.

var re = /(Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50  Section 85"
ShowMatches(src, re);

// Output:
//  Chapter 50
//  submatch 1: Chapter

//  Section 85
//  submatch 1: Section

// Perform a search on a string by using a regular expression,
// and display the matches and submatches.
function ShowMatches(src, re)
{
    var result;

    // 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);
    }
}

Alternação sem um Submatch salvo

No exemplo anterior, você apenas deseja usar parênteses para agrupar uma escolha entre as palavras "Chapter" e a "seção".

Para impedir que o submatch sendo salvo para uso posterior, você pode especificar a subexpressão (?:padrão). O exemplo a seguir faz a mesma coisa que o exemplo anterior, mas não salvará o submatch.

var re = /(?:Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50  Section 85"
ShowMatches(src, re);
// Output:
//  Chapter 50
//  Section 85

Subexpressões

Colocar parênteses em uma expressão regular cria uma subexpressão. A submatch resultante pode ser recuperada pelo programa.

No exemplo a seguir, a expressão regular contém três subexpressões. As seqüências de caracteres submatch exibem junto com cada correspondência.

var re = /(\w+)@(\w+)\.(\w+)/g
var src = "Please send mail to george@contoso.com and someone@example.com. Thanks!"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.

// Output:
//  george@contoso.com
//  submatch 1: george
//  submatch 2: contoso
//  submatch 3: com

//  someone@example.com
//  submatch 1: someone
//  submatch 2: example
//  submatch 3: com

O exemplo a seguir separa o indicador de recurso Universal (URI) em seus componentes.

A primeira subexpressão entre parênteses salva a parte do protocolo do endereço da Web. Corresponde a qualquer palavra que vem antes de dois-pontos e dois para a frente barras. O segundo subexpressão entre parênteses salva a parte do endereço de domínio do endereço. Corresponde a qualquer seqüência de caracteres que não inclua a barra (/) de interrogação ou dois-pontos (:) caracteres. O terceiro subexpressão entre parênteses salva um número de porta do site da Web, se alguma for especificada. Corresponde a zero ou mais dígitos após um dois-pontos. O quarto subexpressão entre parênteses salva as informações de caminho e/ou a página especificadas pelo endereço da Web. Corresponde a zero ou mais caracteres diferente, por exemplo, o caractere de sinal numérico (#) ou o caractere de espaço.

var re = /(\w+):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi;
var src = "https://msdn.microsoft.com:80/scripting/default.htm";
ShowMatches(src, re);

// Output:
//  https://msdn.microsoft.com:80/scripting/default.htm
//  submatch 1: http
//  submatch 2: msdn.microsoft.com
//  submatch 3: :80
//  submatch 4: /scripting/default.htm

Positivo e negativo Lookaheads

Um lookahead positivo é uma pesquisa na qual, após uma correspondência for encontrada, a pesquisa para o próximo inicia de correspondência antes do texto correspondente. A correspondência não é salvo para uso posterior. Para especificar um lookahead positivo, use a sintaxe (?=padrão).

No exemplo a seguir, uma pesquisa é realizada para determinar se uma senha é de 4 a 8 caracteres e contém pelo menos um dígito.

Na expressão regular, .*\d localiza qualquer número de caracteres, seguido de um dígito. Para a seqüência pesquisada "abc3qr", isso corresponde a "abc3". Iniciando antes, em vez de após essa correspondência, .{4,8} corresponde a uma seqüência de caracteres de 4 a 8. Isso corresponde a "abc3qr".

O ^ e $ especificar as posições no início e fim da seqüência de caracteres pesquisada. Isso é para evitar que uma correspondência se a seqüência de caracteres pesquisada contém caracteres que fora do correspondente.

var re = /^(?=.*\d).{4,8}$/gi
var src = "abc3qr"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.
// Output:
//  abc3qr

Um lookahead negativo procura em uma seqüência de pesquisa não coincide com o padrão em uma expressão lookahead negativo. Depois que uma correspondência for encontrada, a pesquisa para a próxima correspondência inicia antes do texto correspondente. A correspondência não é salvo para uso posterior. Para especificar um lookahead negativo, use a sintaxe (?!padrão).

O exemplo a seguir corresponde a palavras que não começam com "th".

Na expressão regular, \b corresponde a um limite de palavra. A seqüência de caracteres pesquisada" rápida ", isso corresponde ao primeiro espaço. (?!th)corresponde a uma seqüência de caracteres que não seja "th". Isso corresponde a "qu". Iniciando antes que coincidirem com, \w+ corresponde a uma palavra. Isso corresponde a "rápida".

var re = /\b(?!th)\w+\b/gi
var src = "The quick brown fox jumps over the lazy dog."
ShowMatches(src, re);
// Output:
//  quick
//  brown
//  fox
//  jumps
//  over
//  lazy
//  dog

Consulte também

Conceitos

Referências anteriores em JScript

Outros recursos

Introdução a expressões regulares