Highlighter de Expressão Regular

26 de julho de 2010 Comente! Follow me!
Programação

Uma expressão regular bem trabalhada e com muitos caracteres geralmente é de difícil leitura e pode parecer um bicho de sete cabeças. A dificuldade está em identificar onde fecham alguns metacaracteres, como um grupo (os parênteses), as chaves e colchetes.

Para solucionar esse problema, existem scripts para fazer highlight (destacar) os metacaracteres e facilitar a leitura da regex.

Steven Levithan, criador do RegexPal, extraiu a engine de highlight do RegexPal e deixou ela disponível, chamando-a de Javascript Regex Syntax Highlighter, para ser usada em qualquer página HTML.

Exemplos

\b[0-9]{4}(-[0-9]{2})?\b
^[A-Za-z0-9\._+-]+[@]{1}[A-Za-z0-9\.|-|_]*[.]{1}[a-z]{2,5}$

Os erros da expressão regular são estilizados na cor vermelha. Confira abaixo (parênteses e colchetes sem fechamento):

([0-9]{4}\/[a-z

Instalação

1. Fazer o download do javascript e do CSS, na página http://stevenlevithan.com/regex/syntaxhighlighter/.

2. Chamar os 2 arquivos entre as tags e da página que você vai usar o Javascript Regex Syntax Highlighter:

<script src="http://www.seusite.com/js/jsresyntaxhighlighter-min.js" type="text/javascript"></script>
<link href="http://www.seusite.com/css/jsresyntaxhighlighter.css" rel="stylesheet" type="text/css" />

3. Acrescentar o script que dispara a função do javascript que faz highlight nas regex. Pode fazer como sugerido pelo autor do script, salvando o seguinte código em um arquivo .js, como regex-highlighter.js:

var regexEls = document.getElementsByClassName("regex"),
    len = regexEls.length,
    el, text, i;
 
for (i = 0; i < len; i++) {
    el = regexEls[i];
    text = el.textContent || el.innerText;
 
    // this is where the magic happens
    el.innerHTML = highlightJsReSyntax(text);
}

e importá-lo, no final da página:

<script src="http://www.seusite.com/js/regex-highlighter.js" type="text/javascript"></script>

4. Usar <pre style="regex">sua regex aqui</pre> onde quiser fazer o destaque da expressão.

Outra solução: ShellScript

Fiz um script utilizando as ferramentas grep e sed, geralmente nativas do bash linux. O código está disponível em http://labs.luishenrique.org/#shell. Obs.: Vou melhorar o código e disponibilizá-lo, em breve, no GitHub.

Exemplo

$ er-tester 'abc42 casa' '\b[a-z]{3}([0-9]{2})\b'
er-tester-demo

Espero ter ajudado! Comente!

Compartilhe:

  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • PDF
  • Twitter
  • Add to favorites
  • RSS


Comentários

  1. Jonnas Fonini 26 de julho de 2010

    Excelente dica e parabéns pelo shell script. Abraço!

  2. Luís Henrique 26 de julho de 2010

    @fonini, valeu mesmo pelo apoio! Abraço!

Deixe um comentário:

* Campo de preenchimento obrigatório.

XHTML: Você pode usar estas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Para mostrar uma foto nos comentários, use o Gravatar.