Expressões regulares As expressões regulares são padrões usados para combinar combinações de caracteres em strings. Em JavaScript, expressões regulares também são objetos. Esses padrões são usados com o exec e os métodos de teste do RegExp. E com a partida. substituir. pesquisa. E métodos divididos de String. Este capítulo descreve expressões regulares do JavaScript. Criando uma expressão regular Você constrói uma expressão regular de uma das duas maneiras: Usando um literal de expressão regular, que consiste em um padrão entre barras, da seguinte maneira: Os literais de expressão regular fornecem compilação da expressão regular quando o script é carregado. Quando a expressão regular permanecerá constante, use isso para melhor desempenho. Ou chamando a função de construtor do objeto RegExp, da seguinte maneira: usando a função do construtor fornece compilação de tempo de execução da expressão regular. Use a função do construtor quando você sabe que o padrão de expressão regular irá mudar, ou você não conhece o padrão e está obtendo isso de outra fonte, como a entrada do usuário. Escrevendo um padrão de expressão regular Um padrão de expressão regular é composto de caracteres simples, como abc. Ou uma combinação de caracteres simples e especiais, como abc ou Capítulo (d).d. O último exemplo inclui parênteses que são usados como um dispositivo de memória. A correspondência feita com esta parte do padrão é lembrada para uso posterior, conforme descrito em Usando parênteses entre parênteses. Usando padrões simples Padrões simples são construídos de caracteres para os quais você deseja encontrar uma correspondência direta. Por exemplo, o padrão abc combina combinações de caracteres em strings somente quando exatamente os caracteres abc ocorrem juntos e nessa ordem. Tal partida seria bem sucedido nas cordas Oi, você conhece seus abcs e Os últimos projetos de avião evoluíram de slabcraft. Em ambos os casos, a correspondência é com a substring abc. Não há correspondência na cadeia Grab crab porque, enquanto contém a substring ab c, ela não contém a substring exata abc. Usando caracteres especiais Quando a busca de uma partida exige algo mais do que uma correspondência direta, como encontrar uma ou mais bs, ou encontrar espaço em branco, o padrão inclui caracteres especiais. Por exemplo, o padrão abc corresponde a qualquer combinação de caracteres em que um único é seguido por zero ou mais bs (significa 0 ou mais ocorrências do item anterior) e depois imediatamente seguido por c. Na string cbbabbbbcdebc, o padrão corresponde à substring abbbbc. A tabela a seguir fornece uma lista completa e uma descrição dos caracteres especiais que podem ser usados em expressões regulares. Caracteres especiais em expressões regulares. Corresponde de acordo com as seguintes regras: Uma barra invertida que precede um caractere não especial indica que o próximo caractere é especial e não deve ser interpretado literalmente. Por exemplo, um b sem um precedente geralmente coincide com bs minúsculas onde quer que ocorram. Mas um b por si só não corresponde a nenhum caractere que forma o caractere especial do limite da palavra. Uma barra invertida que precede um caractere especial indica que o próximo personagem não é especial e deve ser interpretado literalmente. Por exemplo, o padrão a depende do caractere especial para corresponder 0 ou mais como. Em contraste, o padrão a remove a especialidade do para habilitar combinações com strings como a. Não esqueça de escapar-se enquanto utiliza a notação RegExp (padrão) porque também é um caractere de escape nas cordas. Combina o início da entrada. Se a bandeira multilinha estiver definida como verdadeira, também corresponderá imediatamente após um caractere de quebra de linha. Por exemplo, A não corresponde ao A em um A, mas combina com A em An E. O significado diferente é quando ele aparece como o primeiro caractere em um padrão de conjunto de caracteres. Veja conjuntos de caracteres complementados para obter detalhes e um exemplo. Corresponde ao final da entrada. Se a bandeira multilinha estiver definida como verdadeira, também corresponderá imediatamente antes de um caractere de quebra de linha. Por exemplo, t não corresponde ao t no comedor, mas combina com ele. Corresponde à expressão anterior 0 ou mais vezes. Equivalente a . Por exemplo, bo coin boooo em um fantasma booooed e b em Um pássaro warbled, mas nada em uma cabra grunhiu. Corresponde à expressão anterior 1 ou mais vezes. Equivalente a . Por exemplo, um corresponde ao a em doces e a todos como em caaaaaaandy, mas nada em cndy. Corresponde à expressão anterior 0 ou 1 vez. Equivalente a . Por exemplo, ele combina o el em anjo e o ângulo do le e também o l in oslo. Se usado imediatamente após qualquer um dos quantificadores,. Ou, torna o quantificador não-ganancioso (correspondente ao menor número de caracteres possíveis), em oposição ao padrão, que é ganancioso (combinando o máximo de caracteres possível). Por exemplo, a aplicação de d para 123abc corresponde a 123. Mas aplicar d para essa mesma string corresponde apenas ao 1. Também usado em asserções de lookahead, conforme descrito nas entradas x (y) e x (y) desta tabela. (O ponto decimal) corresponde a qualquer caractere, exceto o caractere da nova linha. Por exemplo,.n corresponde a um e ligado, uma maçã está na árvore, mas não sim. Corresponde a x e lembra a partida, como mostra o exemplo a seguir. Os parênteses são chamados de capturar parênteses. O (foo) e (bar) no padrão (foo) (barra) 1 2 coincidem e lembre-se das duas primeiras palavras na barra de foo bar foo bar. Os 1 e 2 no padrão combinam as duas últimas palavras. Observe que 1, 2, n são usados na parte correspondente do regex. Na parte de substituição de uma regex, a sintaxe 1, 2, n deve ser usada, e. Bar foo. replace ((.) (.), 2 1). Amp significa toda a corda correspondente. Combina x mas não lembra da partida. Os parênteses são chamados de parênteses não captadores. E permite que você defina subexpressões para operadores de expressão regular para trabalhar. Considere a expressão da amostra (: foo). Se a expressão fosse foo. Os personagens só se aplicariam ao último o em foo. Com os parênteses não captadores, aplica-se a toda a palavra foo. Corresponde x somente se x for seguido de y. Isso é chamado de lookahead. Por exemplo, Jack (Sprat) combina Jack apenas se for seguido por Sprat. Jack (SpratFrost) combina Jack apenas se for seguido por Sprat ou Frost. No entanto, nem Sprat nem Frost fazem parte dos resultados da partida. Corresponde x somente se x não for seguido por y. Isso é chamado de lookahead negado. Por exemplo, d (.) Corresponde a um número somente se não for seguido por um ponto decimal. A expressão regular d (.). Exec (3.141) corresponde a 141, mas não 3.141. Corresponde x ou y. Por exemplo, greenred combina verde em maçã verde e vermelho em maçã vermelha. Corresponde exatamente a ocorrências n da expressão anterior. N deve ser um número inteiro positivo. Por exemplo, um não corresponde ao a em doces, mas combina com tudo como em caandy, e os dois primeiros como caaandy. Onde n e m são números inteiros positivos e n lt m. Corresponde pelo menos n e no máximo m ocorrências da expressão anterior. Quando m é omitido, é tratado como. Por exemplo, nada corresponde a cndy, a a candy, os dois primeiros como caandy, e os três primeiros como caaaaaandy. Observe que ao combinar caaaaaandy, a partida é aaa, mesmo que a string original tenha mais como ela. Conjunto de caracteres. Esse tipo de padrão corresponde a qualquer um dos caracteres nos suportes, incluindo seqüências de escape. Caracteres especiais como o ponto (.) E o asterisco () não são especiais dentro de um conjunto de caracteres, então eles não precisam ser escapados. Você pode especificar um intervalo de caracteres usando um hífen, como ilustram os exemplos a seguir. O padrão a-d. Que executa a mesma correspondência como abcd. Combina o b no peito e o c na cidade. Os padrões a-z. e W. Combine a cadeia inteira test. i.ng. Um conjunto de caracteres negado ou complementado. Ou seja, corresponde a qualquer coisa que não esteja entre os parênteses. Você pode especificar um intervalo de caracteres usando um hífen. Tudo que funciona no conjunto de caracteres normal também funciona aqui. Por exemplo, abc é o mesmo que a-c. Inicialmente, eles combinam r no peito e h em chop. Combina um backspace (U0008). Você precisa usar colchetes se desejar combinar um caractere de retrocesso literal. (Não deve ser confundido com b.) Corresponde a um limite de palavras. Um limite de palavras coincide com a posição em que um personagem de palavra não é seguido ou precedido por outro personagem de palavras. Observe que um limite de palavras correspondentes não está incluído na partida. Em outras palavras, o comprimento de um limite de palavra correspondente é zero. (Não deve ser confundido com b.) Exemplos: bm corresponde ao m na lua oob não corresponde ao oo na lua, porque oo é seguido por n, que é uma palavra oonb do personagem corresponde ao oon na lua, porque oon é o fim de A string, portanto não seguida de uma palavra wbw caráter nunca irá combinar qualquer coisa, porque um personagem de palavras nunca pode ser seguido por um personagem que não é de palavra e de uma palavra. Nota: o mecanismo de expressão regular JavaScripts define um conjunto específico de caracteres para serem caracteres de palavras. Qualquer personagem que não esteja nesse conjunto é considerado uma quebra de palavras. Este conjunto de caracteres é bastante limitado: consiste apenas no alfabeto romano, tanto em letras decimais quanto em letras maiúsculas e minúsculas, e o caractere de sublinhado. Caracteres acentuados, como ou, infelizmente, são tratados como quebras de palavras. Corresponde a um limite não-palavra. Isso corresponde a uma posição em que o caractere anterior e seguinte são do mesmo tipo: ambos devem ser palavras, ou ambos devem ser não-palavras. O início e o fim de uma string são considerados não-palavras. Por exemplo, B .. combina oo no meio-dia, e yB. Combina com você possivelmente ontem. Onde X é um personagem que varia de A a Z. Corresponde a um caractere de controle em uma string. Por exemplo, cM combina controle-M (U000D) em uma seqüência de caracteres. A entrada do usuário que escapa para ser tratada como uma string literal dentro de uma expressão regular pode ser realizada por simples substituição: usando parênteses Parênteses em torno de qualquer parte do padrão de expressão normal faz com que essa parte da subcapa correspondente seja lembrada. Uma vez que é lembrado, a substring pode ser recontada para outro uso, como descrito em Uso de Partisheses Substring Matches. Por exemplo, o padrão Capítulo (d).d ilustra caracteres adicionais escapados e especiais e indica que parte do padrão deve ser lembrado. Ele corresponde precisamente aos caracteres Capítulo seguido por um ou mais caracteres numéricos (d significa qualquer caractere numérico e significa uma ou mais vezes), seguido por um ponto decimal (que em si é um caractere especial que precede o ponto decimal com os significados que o padrão deve ter Para o caráter literal.), Seguido de qualquer caractere numérico 0 ou mais vezes (d significa caráter numérico, significa 0 ou mais vezes). Além disso, os parênteses são usados para lembrar os primeiros caracteres numéricos correspondentes. Este padrão é encontrado no Capítulo Aberto, os parágrafos 6 e 4 são lembrados. O padrão não é encontrado nos Capítulo 3 e 4, porque essa seqüência de caracteres não tem um período após o 3. Para combinar uma substring sem que a parte correspondente seja lembrada, entre os parênteses prefira o padrão com. Por exemplo, (: d) corresponde a um ou mais caracteres numéricos, mas não se lembra dos caracteres correspondentes. Trabalhando com expressões regulares, as expressões regulares são usadas com o teste de métodos RegExp e o exec e com os métodos String. substituir. pesquisa. E dividido. Esses métodos são explicados em detalhes na referência de JavaScript. Métodos que usam expressões regulares O texto do padrão. Atualizado no momento em que a expressão regular é criada, não executada. Conforme mostrado na segunda forma deste exemplo, você pode usar uma expressão regular criada com um iniciador de objetos sem atribuí-lo a uma variável. Se você fizer, no entanto, cada ocorrência é uma nova expressão regular. Por esse motivo, se você usar esse formulário sem atribuí-lo a uma variável, não poderá acessar as propriedades dessa expressão regular. Por exemplo, suponha que você tenha esse script: No entanto, se você tiver esse script: As ocorrências de d (b) dg nas duas instruções são objetos de expressão regular diferentes e, portanto, têm valores diferentes para sua propriedade lastIndex. Se você precisa acessar as propriedades de uma expressão regular criada com um iniciador de objeto, primeiro você deve atribuí-la a uma variável. Usando combinações de substring entre parênteses Incluindo parênteses em um padrão de expressão regular faz com que o submatch correspondente seja lembrado. Por exemplo, um (b) c corresponde aos caracteres abc e lembra b. Para recuperar essas parênteses parênteses, use os elementos da matriz 1. n. O número de substring parênteses possíveis é ilimitado. A matriz retornada contém todos os que foram encontrados. Os exemplos a seguir ilustram como usar parênteses entre parênteses. O script a seguir usa o método replace () para mudar as palavras na string. Para o texto de substituição, o script usa os 1 e 2 na substituição para denotar a primeira e segunda correspondências de substring entre parênteses. Isso imprime Smith, John. Pesquisa avançada com bandeiras As expressões regulares possuem quatro sinalizadores opcionais que permitem a busca global e insensível a maiúsculas e minúsculas. Essas bandeiras podem ser usadas separadamente ou em conjunto em qualquer ordem, e estão incluídas como parte da expressão regular. Sinalizadores de expressões regulares Para incluir uma bandeira com a expressão regular, use esta sintaxe: Observe que as bandeiras são parte integrante de uma expressão regular. Eles não podem ser adicionados ou removidos posteriormente. Por exemplo, re wsg cria uma expressão regular que procura um ou mais caracteres, seguido de um espaço, e procura essa combinação em toda a cadeia. Isso exibe taxa, fi, fo. Neste exemplo, você pode substituir a linha: e obter o mesmo resultado. O comportamento associado ao sinalizador g é diferente quando o método. exec () é usado. (Isso não deve ser uma surpresa, é esperado que uma determinada expressão regular tenha um comportamento diferente quando usado com. match () versus. exec (). As funções de classe e argumento são invertidas: no caso de. match (). A string Classe (ou tipo de dados) possui o método e a expressão regular é apenas um argumento, enquanto no caso de. exec (). É a expressão regular que possui o método, sendo a string o argumento. Contraste str. match ( Re) versus re. exec (str).) O sinalizador g é usado com o método. exec () para obter a progressão iterativa. O indicador m é usado para especificar que uma string de entrada de várias linhas deve ser tratada como múltiplas linhas. Se o indicador m for usado e combinar no início ou no final de qualquer linha dentro da cadeia de entrada em vez do início ou fim de toda a cadeia. Os exemplos a seguir mostram alguns usos de expressões regulares. Alterando a ordem em uma cadeia de entrada O exemplo a seguir ilustra a formação de expressões regulares e o uso de string. split () e string. replace (). Ele limpa uma cadeia de entrada com formato aproximado que contém nomes (primeiro nome primeiro) separados por espaços em branco, guias e exatamente um ponto-e-vírgula. Finalmente, ele reverte o nome da ordem (último nome primeiro) e classifica a lista. Usando caracteres especiais para verificar a entrada No exemplo a seguir, espera-se que o usuário digite um número de telefone. Quando o usuário pressiona o botão Verificar, o script verifica a validade do número. Se o número for válido (corresponde à sequência de caracteres especificada pela expressão regular), o script mostra uma mensagem agradecendo ao usuário e confirmando o número. Se o número for inválido, o script informa o usuário que o número do telefone não é válido. Dentro de parênteses que não são captadores (a expressão regular procura por três caracteres numéricos d OU um parêntese esquerdo (seguido de três dígitos d. Seguido de um parêntese próximo). (Parênteses sem captura), seguido de um dash, barra inclinada , Ou ponto decimal e quando encontrado, lembre-se do personagem (-.). Seguido de três dígitos d. Seguido da partida lembrada de um dash, barra inclinada ou ponto decimal 1. seguido de quatro dígitos d. O evento Alterar ativado quando o usuário pressiona Enter define o valor de RegExp. input. Expressões regulares do quadro As expressões regulares fornecem um método poderoso, flexível e eficiente para o processamento de texto. A extensa notação de correspondência de padrões de expressões regulares permite analisar rapidamente grandes quantidades de texto para encontrar padrões de caracteres específicos para validar texto para garantir que ele corresponda a um padrão predefinido (como um endereço de e-mail) para extrair, editar, substituir, Ou excluir substrings de texto e adicionar as seqüências extraídas a uma coleção para gerar um relatório. Para muitas aplicações que lidam com strings ou que analisam grandes blocos de texto, expressões regulares são uma ferramenta indispensável. A peça central do processamento de texto com expressões regulares é o mecanismo de expressão regular, que é representado pelo objeto System. Text. RegularExpressions. Regex no Framework. No mínimo, processar texto usando expressões regulares exige que o motor de expressão regular seja fornecido com os dois itens de informação a seguir: O padrão de expressão regular para identificar no texto. No Quadro, os padrões de expressão regulares são definidos por uma sintaxe ou linguagem especial, que é compatível com as expressões regulares do Perl 5 e adiciona alguns recursos adicionais, como a correspondência da direita para a esquerda. Para obter mais informações, consulte Idioma de Expressão Regular - Referência Rápida. O texto para analisar o padrão de expressão regular. Os métodos da classe Regex permitem que você execute as seguintes operações: Determine se o padrão de expressão regular ocorre no texto de entrada chamando o método Regex. IsMatch. Para um exemplo que usa o método IsMatch para validar texto, veja Como: Verifique se as strings estão no formato de e-mail válido. Recupere uma ou todas as ocorrências de texto que corresponda ao padrão de expressão regular, chamando o método Regex. Match ou Regex. Matches. O método anterior retorna um objeto System. Text. RegularExpressions. Match que fornece informações sobre o texto correspondente. O último retorna um objeto MatchCollection que contém um objeto System. Text. RegularExpressions. Match para cada correspondência encontrada no texto analisado. Substitua o texto que corresponde ao padrão de expressão regular, chamando o método Regex. Replace. Para exemplos que usam o método Substituir para alterar os formatos de data e remover caracteres inválidos de uma seqüência de caracteres, veja Como: Disparar caracteres inválidos de uma Cadeia e Exemplo: Alterar Formatos de Data. Para obter uma visão geral do modelo de objeto de expressão regular, consulte O modelo de objeto de expressão regular. Para obter mais informações sobre o idioma de expressão regular, consulte Linguagem de Expressão Regular - Referência Rápida ou baixe e imprima uma dessas brochuras: A classe String inclui uma série de métodos de busca e substituição de string que você pode usar quando deseja localizar cadeias literais em um Corda maior. As expressões regulares são mais úteis quando você deseja localizar uma das várias substrings em uma string maior ou quando deseja identificar padrões em uma string, como os exemplos a seguir ilustram. Exemplo 1: Substituindo Substrings Suponha que uma lista de correspondência contenha nomes que, por vezes, incluam um título (Sra. Sra. Miss ou Sra.), Juntamente com um primeiro e último nome. Se você não quiser incluir os títulos quando gerar rótulos de envelope da lista, você pode usar uma expressão regular para remover os títulos, como ilustra o exemplo a seguir. O padrão de expressão regular (Sra. Sra. Sra. Sra.) Corresponde a qualquer ocorrência de Sr., Sr., Sra., Sra., Senhorita, Sra. Ou Sra. A chamada para o método Regex. Replace substitui a seqüência correspondente com String. Empty, em outras palavras, ele o remove da string original. Exemplo 2: Identificando Palavras Duplicadas Aplicando acidentalmente palavras é um erro comum que os escritores fazem. Uma expressão regular pode ser usada para identificar palavras duplicadas, como mostra o exemplo a seguir. O padrão de expressão regular b (w) s1b pode ser interpretado da seguinte maneira: Comece em um limite de palavras. Combine um ou mais personagens de palavras, mas o menor número possível de caracteres. Juntos, eles formam um grupo que pode ser referido como 1. Combine um personagem de espaço em branco. Faça coincidir a substring que é igual ao grupo chamado 1. Combine um limite de palavras. O método Regex. Matches é chamado com opções de expressão regular configuradas para RegexOptions. IgnoreCase. Portanto, a operação de correspondência não é sensível a maiúsculas e minúsculas, e o exemplo identifica a substring. Isso é uma duplicação. Observe que a seqüência de entrada inclui a substring this This. No entanto, devido ao sinal de pontuação interveniente, não é identificado como uma duplicação. Exemplo 3: Criando dinamicamente uma expressão regular sensível à cultura O exemplo a seguir ilustra o poder das expressões regulares combinadas com a flexibilidade oferecida pelos recursos de globalização da Frameworks. Ele usa o objeto NumberFormatInfo para determinar o formato dos valores de moeda na cultura atual dos sistemas. Em seguida, ele usa essa informação para construir dinamicamente uma expressão regular que extrai valores de moeda do texto. Para cada partida, ele extrai o subgrupo que contém somente a string numérica, converte-o em um valor Decimal e calcula um total em execução. Em um computador cuja cultura atual é Inglês - Estados Unidos (en-US), o exemplo cria dinamicamente a expressão regular s - (0-9 (, 0-9) (. 0-9)). Este padrão de expressão regular pode ser interpretado da seguinte maneira: Procure uma única ocorrência do símbolo do dólar () na string de entrada. A cadeia de padrões de expressão regular inclui uma barra invertida para indicar que o símbolo do dólar deve ser interpretado literalmente em vez de como uma âncora de expressão regular. (O símbolo sozinho indicaria que o motor de expressão regular deveria tentar começar a sua correspondência no final de uma string.) Para garantir que o símbolo de moeda de culturas atual não seja mal interpretado como um símbolo de expressão regular, o exemplo chama o método Escape para escapar o personagem. Procure por zero ou mais ocorrências de um caractere de espaço em branco. Procure por zero ou uma ocorrência de um sinal positivo ou de um sinal negativo. Os parênteses externos em torno desta expressão definem como um grupo de captura ou uma subexpressão. Se uma correspondência for encontrada, informações sobre esta parte da seqüência de correspondência podem ser recuperadas do segundo objeto de grupo no objeto GroupCollection retornado pela propriedade Match. Groups. (O primeiro elemento na coleção representa a partida inteira). Procure por zero a três ocorrências dos dígitos decimais de 0 a 9. Procure por zero ou mais ocorrências de um separador de grupo seguido de três dígitos decimais. Procure uma única ocorrência do separador decimal. Procure um ou mais dígitos decimais. Procure por zero ou uma ocorrência do separador decimal seguido de pelo menos um dígito decimal. Se cada um desses subpatrones for encontrado na seqüência de entrada, a correspondência for bem-sucedida e um objeto Match que contenha informações sobre a correspondência é adicionado ao objeto MatchCollection.
No comments:
Post a Comment