Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/vol6_1/byethost16.com/b16_22751756/blog.wesley.com.br/htdocs/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Quem me conhece sabe que sou aficionado por expressões regulares (ER) e vez ou outra me deparo com probleminhas nem tão fáceis de resolver.
O desafio desta vez era separador de milhares.
Resposta em JavaScript:
1 | "1234567.89".replace(/\d(?=(?:\d{3})+(?:\D|$))/g, "$&,") |
Em linhas gerais, a ER combina APENAS com 1 caractere numérico seguido de grupos de 3 caracteres numéricos seguido de 1 caractere não-numérico ou fim da string.
Três pontos interessantes a ressaltar são o uso do $& e dos grupos (?=…) e (?:…)
Todo o restante da ER é bem básica.
- O grupo
(?:...)
é usado para agrupar dados que não devem ser espelhados (RegExp.$1-9).
Eles foram usados respectivamente para “agrupar agrupamentos” e “quebrar precedência”. - O grupo
(?=...)
é usado para testar a expressão, mas que não deve fazer parte ao resultado final. $&
é usado para retornar toda a substring combinada na ER.
No caso do exemplo, retorna apenas\d
que está fora do grupo(?=...)
.
Alguém pode questionar: Opa, mas estou no Brasil e os pontos decimal e milhar são respectivamente “,” e “.”.
Ok, neste caso eu aconselho fazer o seguinte:
1 | "1234567.89".replace(/[.]/g, ",").replace(/\d(?=(?:\d{3})+(?:\D|$))/g, "$&.") |
Em breve devo publicar um post falando só de expressões regulares e ponho o link aqui.
victor
25 de agosto de 2014 às 19:07
Cara só tenho uma coisa a dizer… Eu amo você….
Já me falaram que Expreções regulares são muito fodas porém são um diferencial e tanto durante o desenvolvimento.. comecei a fazer uma função pra resolver essa situação e ela estava ficando chata… procurei outras na net e vi que todas estavam indo pela mesma linha de raciocínio, mas com um único comando vc resolveu… Parabéns você me motivou a aprender a utilizar esse recurso foda..
Wesley Menezes
17 de maio de 2015 às 23:39
Demorei a responder porque na verdade só descobri agora que era possível responder aos comentários do pessoal 🙂 * Completamente iniciante com WordPess *
Estou com uns posts sobre Expressões Regulares agendados para os próximos meses, conforme prometido no post.
Fico agradecido por seu comentário.
Vicente
30 de abril de 2015 às 17:10
Parabéns Wesley!
Semalhante ao Victor, estava escrevendo uma função após passar o dia buscando plugins em JQuery que resolvesse isto, considerando também valores negativos. Sua ER resolveu de forma elegante o problema!
Valeu!
Wesley Menezes
17 de maio de 2015 às 23:36
Realmente para este caso um plugin do jQuery não seria uma boa alternativa até porque a funcionalidade é bem simples.
Eu que agradeço ao comentário.