313 Shares 8753 views

Javascript, exemplos de expressões regulares, consulte Expressões Regulares

Antes do advento das linguagens de hipertexto, mas antes, ficou claro que era necessário não só procurar, mas também fazê-lo sob certas condições, em um local específico, com dados alterados, nas quantidades certas, as funções usuais de busca e substituição organizadas para qualquer sofisticado Programador. Foram criadas obras-primas de arte de pesquisa em linguagens de programação, e as bases de dados foram refinadas sob a forma de condições de amostragem, equipadas com procedimentos armazenados, desencadeantes e outros meios de amostragem a partir de complicadas composições de informação relacional. O surgimento de expressões regulares para a revolução não conduziu, mas resultou ser um meio útil e conveniente para pesquisar e substituir informações. Por exemplo, os e-mails JavaScript JavaScript regulares simplificam significativamente o registro de visitantes, eles não baixam o site enviando mensagens para endereços inexistentes.

Para dizer que a expressão regular de JavaScript é muito melhor do que as sequências de indexOf () bem pensadas no enquadramento de operadores condicionais e cíclicos, é impossível, mas dizer que ele tornou o código do script compacto, mas mal compreendido para os não iniciados, pode ser inequívoco.

RegExp object = template + engine

Expressões regulares são um modelo + motor. A primeira é a própria expressão regular – o objeto JavaScript é RegExp, o segundo é o executor do modelo que o aplica à string. Os motores que implementam expressões regulares para cada linguagem de programação são diferentes. E, embora nem todas as diferenças sejam significativas, isso deve ser levado em conta, bem como não se esqueça de verificar cuidadosamente a expressão regular antes de usá-la.

Uma notação especial para escrever expressões regulares é bastante conveniente e bastante eficaz, mas requer cuidados, precisão e paciência do desenvolvedor. Para a notação de padrões de expressões regulares, é necessário se acostumar. Esta não é uma homenagem à moda, é a lógica de implementar o mecanismo de "expressões regulares de JavaScript".

Padrão de expressão regular

Duas opções são permitidas:

Var expOne = / abc * / i;

Var expTwo = RegExp ("abc *", "i");

Normalmente, o primeiro método é usado. No segundo caso, aspas são usadas, então, para usar o caractere '', ele deve ser escapado por regras comuns.

"Eu" é a bandeira que denotou "registrar não é importante". Você também pode usar os sinalizadores 'g' – 'pesquisa global' e 'm' – pesquisa multi-linha.

O símbolo '/' é usado para designar um modelo.

O início e o fim da expressão regular

O caractere '^' define o (s) personagem (s) a partir do qual a expressão regular começa, e '$' determina quais caracteres devem estar no final. Não experimente com eles dentro da expressão, eles têm um significado diferente.

Por exemplo,

Var eRegExp = novo RegExp (cRegExp, 'i');

Var cRegRes = '';

Var sTest = 'AbcZ';

Se (eRegExp.test (sTest)) {

CRegRes + = '- Yes';

} Else {

CRegRes + = '- No';

}

Var dTestLine = document.getElementById ('scTestLine');

DTestLine.innerHTML = 'A expressão /' + cRegExp + '/ para a string "+ sTest +'" + cRegRes.

No elemento 'scTestLine' haverá um resultado (a variável cRegExp tem o valor correspondente):

A expressão / ^ AbcZ $ / para a string "abcz" – Sim

Se você remover o sinalizador 'i', o resultado será:

A expressão / ^ AbcZ $ / para a string "abcz" – Não

Conteúdo de expressão regular

Uma expressão regular é uma seqüência de caracteres que é objeto de uma pesquisa. A expressão / qwerty / procura a ocorrência de exatamente esta seqüência:

Expressão / qwerty / para a string "qwerty" – Sim

A expressão / qwerty / para a string "123qwerty456" – Sim

O caractere '^' muda a essência da expressão:

A expressão / ^ qwerty / para a string "123qwerty456" – Não

A expressão / ^ qwerty / para a string "qwerty456" – Sim

Da mesma forma para o caractere de fim de linha. As expressões regulares permitem seqüências: por exemplo, [az], [AZ], [0-9] – todas as letras do alfabeto latino no registro ou dígitos especificados. As letras russas também podem ser usadas, mas você deve prestar atenção à codificação de strings (onde procurar o que está sendo pesquisado) e a página. Muitas vezes, letras russas, como caracteres especiais, são preferencialmente dadas por códigos.

Ao formar uma expressão regular, você pode especificar as opções para a presença de certos símbolos em um determinado local, com seu número configurado da seguinte forma: '*' = repetição de 0 ou mais vezes; '+' = Repita 1 ou mais vezes; {1,} é o mesmo que '+'; {N} = repetição exatamente n vezes; {N,} = repetição de n e mais vezes; {N, m} = repetição de n para m vezes.

Usando suportes quadrados, você pode especificar as variantes de caracteres do conjunto. Parece assim. [Abcd] = [ad] = qualquer caractere de quatro: 'a', 'b', 'c' ou 'd'. Você pode especificar o contrário. Qualquer caractere diferente dos especificados no conjunto: [^ abcd] = qualquer caractere exceto 'a', 'b', 'c' ou 'd'. '?' Indica que não pode haver um símbolo neste lugar. '.' Define qualquer caractere, exceto para uma quebra de linha. Isto é ' n', ' r', ' u2028' ou ' u2029'. A expressão ' s * | S *' = '[ s | S] *' significa a busca de qualquer caractere, incluindo quebras de linha.

Versões simplificadas da expressão regular

A expressão '[ s | S] *' – procura por um espaço ou sua ausência, isso é tudo o que está na linha. Neste caso, a notação ' s' representa um espaço, e ' S' significa a ausência dele.

Da mesma forma, você pode usar ' d' para procurar um dígito decimal, e ' D' encontrará um caracter não-numérico. As notações ' f', 'r' e ' n' correspondem a alimentação de formulário, retorno de carro e alimentação de linha.

O caractere de tabulação é ' t', o caractere vertical é ' v'. A notação ' w' encontrará qualquer caractere do alfabeto latino (letras, números, sublinhado) = [A-Za-z0-9_].

A notação ' W' é equivalente a [^ A-Za-z0-9_]. Isso significa qualquer caractere que não seja uma letra do alfabeto latino, um número ou um caractere '_'.

Procure o caractere ' 0' = procure o caractere NUL. Procure por ' xHH' ou ' uHHHH' = procure um caractere com o código HH ou HHHH, respectivamente. H – dígito hexadecimal.

Linguagem recomendada e codificação da expressão regular

Qualquer expressão regular é importante para testar cuidadosamente em diferentes opções de linha.

Com a experiência de criar expressões regulares, os erros serão menores, mas, no entanto, é preciso sempre ter em mente que o próprio conhecimento das regras de escrita de uma expressão regular pode não corresponder à realidade, especialmente quando o "regular" é transferido de um idioma para outro.

Escolhendo entre os clássicos (indicação exata) e uma versão simplificada da expressão regular, é melhor preferir o primeiro. Afinal, os clássicos sempre indicam claramente o que está sendo buscado. Se houver letras russas na expressão regular ou na cadeia de pesquisa, você deve resultar em uma única codificação de todas as linhas e uma página na qual o código JavaScript que executa a expressão regular opera.

Ao processar caracteres que não pertencem ao alfabeto latino, faz sentido considerar especificar os códigos de personagem, e não os próprios personagens.

Ao implementar algoritmos de busca de JavaScript, a expressão regular deve ser cuidadosamente verificada. É especialmente importante controlar a codificação de caracteres.

Parênteses em expressões regulares

Os suportes quadrados especificam as variantes de símbolos que devem estar ou não presentes num determinado local e as redondas são variantes das seqüências. Mas esta é apenas uma regra geral. Não há exceções, mas existem muitas aplicações diferentes.

Var cRegExp = "[az] *. (Png | jpg | gif)";

Var eRegExp = novo RegExp (cRegExp, 'i');

Var cRegRes = '';

Var sTest = 'picture.jpg';

Se (eRegExp.test (sTest)) {

CRegRes + = '- Yes';

} Else {

CRegRes + = '- No';

}

Resultados:

Expressão /[az]*.(png|jpg|gif)/ para a linha "picture.jpg" – Sim

Expressão /^[ad][az]*.(png|jpg|gif)/ para a linha "picture.jpg" – Não

Expressão / ^[ad][az]*.(png|jpg|gif)/ para a string "apicture.jpg" – Sim

Expressão /^[ad][az]*.(png|jpg|gif)/ para a string "apicture.jg" – Não

Deve ser especialmente observado que tudo, após o qual existe um asterisco, pode estar presente zero vezes. Isso significa que o "regular" pode funcionar da maneira mais inesperada pelo menos.

Verificando RegExp – teste de email

Em JavaScript, as expressões regulares recebem dois métodos, teste e exec e podem ser usadas em objetos String em seus métodos: procurar, dividir, substituir e combinar.

O método de teste já foi demonstrado, ele permite verificar a correção de uma expressão regular. O resultado do método é verdadeiro / falso.

Considere as seguintes expressões regulares de JavaScript. Verificar o email do número de "difícil, mas preciso":

Var eRegExp = /^(([^()[]\.,;:s@"]+(.[^()[]\.,,,,ss @ "] +) *) | (". + ")) @ (( [[0-9] {1,3} . [0-9] {1,3} . [0-9] { 1,3} . [0-9] {1,3}]) | (([a-zA-Z -0-9] + .) + [A-zA-Z] {2,}) ) $ /;

Para a string var sTest ='[email protected] 'é verdadeira, isto é, essa string é o endereço de e-mail correto. A verificação foi realizada usando o método eRegExp.test (sTest).

Uso prático: processamento de e-mail

O método exec na saída fornece uma matriz, ligue:

Var aResult = eRegExp.exec (sTest);

CRegRes = '
' + aResult.length + '
';
Para (var i = 0; i <aResult.length; i ++) {
CRegRes + = aResult [i] + '
';
}

Dá o seguinte resultado:


[email protected]
Slava.Chip
Slava.Chip
.Chip
Indefinido
Sci.by
Indefinido
Sci.by
Sci.

Os outros métodos funcionam de forma semelhante. Recomenda-se verificar você mesmo. O desenvolvimento e o uso de expressões regulares são desejáveis para praticar na prática, copiar o código nem sempre é apropriado aqui.

Populares "regulares"

A expressão regular de JavaScript acima para eMail não é a única, há muitas opções mais simples. Por exemplo, / ^[w-.]+@[w-]+.[az]{2,3}$/i. No entanto, esta opção não leva em consideração todas as opções para gravar um endereço de e-mail.

Claro, você precisa rever a experiência dos colegas, analisar os métodos que eles oferecem, antes de projetar sua própria expressão regular em JavaScript. Mas existem algumas dificuldades. Não esqueça que as expressões regulares de JavaScript (exemplos delas ao copiar) podem duplicar os caracteres essenciais: '', '/' ou aspas. Isso levará a um erro que pode ser pesquisado por um longo período de tempo.

É importante levar em conta o "aspecto humano" habitual. Afinal, uma expressão regular de JavaScript formal para um telefone que pode ser um visitante (pessoa) pode ser indicada de várias maneiras: 123-45-67, (29) 1234567, 80291234567 ou +375291234567. E é todo o mesmo número. A variante de escrever vários modelos nem sempre é aceitável, e a fixação rígida da regra para escrever um número pode criar inconvenientes ou limitações desnecessárias. A variante / ^ d [ d () -] {4,14} d $ / i é adequada para a maioria dos casos de verificação de telefone.

Se você deseja compor expressões regulares de JavaScript, apenas digita verificar, então mesmo um caso tão simples requer esclarecimentos. Ele deve considerar um número inteiro ou uma fração, uma notação exponencial ou um número comum, positivo ou número negativo. Você também pode ter em conta a presença de um símbolo de moeda, o número de dígitos após o ponto decimal e a divisão de toda a parte do número em tríades.

A expressão / ^ d + $ / i só irá verificar os dígitos e a expressão / ^ d + . D + $ / i permite que você use um período para indicar a parte fracionada de um número.

Em JavaScript, a verificação de expressões regulares pode ser usada para especificar o formato dos dados de entrada, o que é importante, especialmente quando se inserem questionários, dados de passaporte, endereços legais, etc.

Verificar a data é quase complicado

Considere expressões regulares de JavaScript. Exemplos de uma data, como por um número ou número de telefone, representam uma escolha entre rigidez e flexibilidade. A data do evento é um dos dados essenciais que muitas vezes tem que ser inserido. Mas corrigindo a entrada em um determinado formato: "dd-mm-aaaa" ou "dm.yy" muitas vezes leva à insatisfação do cliente. A transição do campo de entrada do dia-a-mês, realizada pelo formulário HTML clássico, não pode ocorrer quando apenas um dígito é inserido e entrar no segundo pode causar dificuldades. Por exemplo, no campo do dia, 3 já foram inseridos e o próximo dígito 2 não substitui o primeiro, e é atribuído a ele 32, o que, naturalmente, causará inconvenientes.

A eficiência e a conveniência das expressões regulares dependem essencialmente da construção geral do diálogo com o visitante. Em um caso, é aconselhável usar um campo de entrada de formulário para indicar a data, em outro caso é necessário fornecer campos diferentes para o dia, mês e ano. Mas, em seguida, haverá "custos de código" adicionais para verificar o ano bissexto, o número de meses, o número de dias neles.

Procurar com substituição, memória da expressão regular

O JavaScript substitui (expressões regulares) usa o método do objeto String e permite que você encontre o valor e altere-o imediatamente. Isso é útil para corrigir erros de entrada, editar o conteúdo dos campos de formulário e para converter dados de um formato de apresentação para outro.

Var cRegExp = / ([а-я] +) s ([а-я] +) s ([а-я] +) / i; // na busca, três "variáveis" são criadas

Var sTest = 'este artigo é bom!';
Var cRegRes = sTest.replace (cRegExp, "$ 2, $ 3, $ 1");

Var dTestLine = document.getElementById ('scTestLine');

DTestLine.innerHTML = 'A expressão' + cRegExp + 'para a string "+ sTest +" será:' + cRegRes;

Resultado:

A expressão / ([a-π] +) s ([a-π] +) s [[a-π] +) / i para a linha "este artigo é bom!" Obter: um artigo, bom, este!

Quando executado, cada par de parênteses armazena o resultado na 'variável' $ n, onde n é o número do par de suporte ($ 1, $ 2, …). Ao contrário do geralmente aceito, aqui a numeração das variáveis é realizada com 1, e não com 0.

Recomendações gerais

Uma expressão regular simplifica o código, mas o tempo para desenvolvê-lo geralmente é importante. Você pode começar a trabalhar com construções simples e combiná-la em expressões mais complexas. Você pode usar vários serviços on-line para testar expressões regulares ou ferramentas locais especiais.

A melhor opção é criar sua própria biblioteca de expressões regulares e sua própria ferramenta para testar novos desenvolvimentos. Esta é a melhor maneira de consolidar a experiência e aprender a criar rapidamente projetos confiáveis e confortáveis.

Usando repetições de caracteres e linhas, isto é, os caracteres especiais '*', '+' e chaves que indicam o número de repetições, devem ser guiados pelos princípios de simplicidade e conveniência. É importante entender que a expressão regular desde o início de sua operação e até que o resultado seja obtido está inteiramente no poder do motor do navegador usado. Nem todos os idiomas JavaScript são equivalentes. Cada navegador pode trazer suas próprias preferências pessoais na interpretação de expressões regulares.

A compatibilidade diz respeito não apenas às páginas e folhas de estilo, mas também às expressões regulares. Uma página usando JavaScript pode ser considerada como depurada somente quando ela funcionou com sucesso em diferentes navegadores.

JavaScript, String e RegExp

Pelo trabalho certo no nível do cliente, isto é, no navegador do visitante no idioma JavaScript, requer alta qualificação do desenvolvedor. Já faz muito tempo desde a possibilidade de depurar o código JavaScript com suas próprias ferramentas de navegador ou com a ajuda de extensões de terceiros, editores de códigos, programas independentes.

No entanto, nem todos os casos, o depurador pode manipular e fornecer um bom suporte para o desenvolvedor, a detecção de erros rápida, detectar gargalos. As vezes quando o computador tem sido focada nos cálculos, no passado distante. Agora, preste atenção especial aos objetos de informação e de linha têm vindo a desempenhar um papel significativo. O número de cordas de aço, e sua verdadeira natureza se manifestam apenas no momento certo e no lugar certo.

As expressões regulares reforçam a possibilidade de linhas, mas exigem auto-respeito. Debug RegExp em seu trabalho, mesmo que seja possível simular, ideia não muito interessante.

Compreender a estrutura ea lógica do objeto RegExp, significando objeto String, a sintaxe e semântica de JavaScript – um verdadeiro código seguro, a operação estável de cada página eo site como um todo.