Expressões Regulares (RegEx)

Por que você deveria aprender o básico de expressões regulares


Autor: Réulison Silva Publicado em: Agosto 7, 2020

Neste artigo eu vou tentar explicar o básico sobre expressões regulares, vou direcionar o conteúdo para o uso no Google Analytics e Tag Manager.



Muitos profissionais de Ciência de dados, Analistas e Programadores precisam lidar com expressões regulares em algum momento. Essa linguagem exótica é usada para encontrar padrões complexos de texto e pode parecer complicada e intimidadora no início. No entanto, as expressões regulares são uma ferramenta poderosa que requer apenas um pequeno investimento de tempo para aprender.

Expressões Regulares são quase universais, e são capazes de lidar com quase todos os tipos de dados. Várias plataformas de análise de dados e linguagens de programação as suportam, incluindo SQL, Python, R, Alteryx, Tableau, LibreOffice, Java, Scala, .NET e Go. Os principais editores de texto e IDEs, como o Atom Editor, o Notepad ++, o Emacs, o Vim, o Intellij IDEA e o PyCharm também suportam a pesquisa de arquivos com expressões regulares.

E ferramentas conhecidas como: Google Analytics, Tag Manager, Optimizer e muitas outras.

O grande suporte das expressões regulares significa que elas pode ser usadas em quase todos os tipos de sistemas, surpreendentemente elas não têm uma curva de aprendizado muito grande. Se você se encontra escaneando documentos manualmente ou analisando substrings apenas para identificar padrões de texto, talvez seja legal aprender. Especialmente nas áreas de Ciência e Engenharia de dados, elas podem ajudar em muitas tarefas, desde organizar os dados, até qualificá-los e classificá-los.

Neste artigo também irei comentar sobre alguns recursos das expressões regulares para ajudar na grande maioria das tarefas que você pode se deparar.

O que são Expressões Regulares?

Expressões Regulares são usadas para identificar um padrão em uma string. É uma forma matemática usada para calcular e identificar certos caracteres usados para definir padrões numa cadeira de caracteres, também chamadas de strings.

As Expressões Regulares também são conhecidas como regex (regular expressions).

Por exemplo, ^Flor?es$ é uma expressão regular que corresponde as duas strings: flor e flores.

Um regex é composto de caracteres e metacaracteres.

O regex usado neste artigo é para JavaScript.

Se você desejar testar e aprender Expressões Regulares mais a fundo saiba mais neste link.

O que são Metacaracteres?

São caracteres que determinam funções especiais dentro de uma regex. Eles são os blocos de construção de um regex.

Por exemplo: [ ], ^, ( ), { }, $, +, *, etc.

Tipos de Expressões Regulares

Os tipos de sintaxe usadas para construir expressões regulares são chamadas de regex engines (mecanismos de expressão regular), ou seja, são usadas na sua implementação.

Existem muitos tipos de regex engines disponíveis. Os mais populares entre eles são:

Cada mecanismo interpreta e suporta diferentes formas de sintaxe e o significado dos metacaracteres pode mudar dependendo do mecanismo de regex que está sendo usado.

O mecanismo de expressão regular no JavaScript define um conjunto específico de caracteres para serem interpretados como “palavras”. Qualquer caractere que não esteja neste conjunto é considerado uma “quebra de palavra”. Este conjunto de caracteres é bastante limitado: consiste apenas no alfabeto romano tanto maiúsculo como minúsculo, digítos decimais, e o caractere underline. Caracteres com acento, tal como “é” ou “ã” são, infelizmente, tratados como “palavras quebradas”.

Portanto, uma expressão regular considerada válida em um regex engine pode não ser considerada válida em outro regex engine. Entendeu?

Sempre que você testar uma regex usando uma ferramenta de teste para regex, terá a opção de selecionar o mecanismo com o qual você deseja testar sua expressão regular:

Ferramenta de testes para expressões regulares

O mecanismo de expressão regular usado pelo Google Analytics e pelo Tag Manager é o JavaScript, você deve sempre selecionar JavaScript para testar suas expressões regulares para o GA/GTM.

Quais são as vantagens de usar o REGEX no Google Analytics?

Existem muitos casos em que expressões regulares são úteis no Google Analytics. Alguns desses casos são:

Configurar uma meta que deve corresponder a várias páginas:

Expressão Regular como meta no Google Analytics

Configurar um funil em que uma etapa deve corresponder a várias páginas

Na verdade, quando você configura um funil, todas as URLs são tratadas como expressões regulares:

Usando expressão regular para criar um funil de meta no Google Analytics

Usando filtros para excluir tráfegos de IPs

De fato, existem muitos filtros que exigem expressões regulares. Grandes empresas geralmente possuem um largo intervalo de endereços IP.

Portanto, para filtrar o tráfego interno da empresa, você precisa especificar um intervalo de IP através de uma regex:

Filtro interno de IP usando Regex

Configurar segmentos personalizados complexos, como os segmentos que podem corresponder a palavras-chave de marca

Segmento Customizado para palavras-chaves no Google Analytics

Nesse segmento acima eu defino todas as buscas que contém apenas 1 palavra, ou seja, uma string.

Entendendo o valor das palavras-chaves de cauda longa

Segmento Customizado para palavras-chave de cauda longa

Na imagem acima conseguimos ver o tráfego separado por número de strings na consulta, ou seja, podemos analisar a profundidade da cauda longa. Para funcionar é necessário excluir as strings (not set), (not provided) ou outras definidas por padrão no Googla Analytics da amostragem na hora de montar o segmento.

Outra dica é você excluir as strings que contenham sua marca (branded search) e criar um outro segmento somente para consultas que contenham o nome de sua marca.

Reescrevendo URLs nos relatórios do Google Analytics

Por exemplo, incluindo o dominio (host) na URI da solicitação: filtro-dominio-uri

Filtro para incluir o nome do host na URI de soliticação

Você também pode reescrever URLs nos relatórios do Google Analytics com o filtro avançado Pesquisar e Substituir.

Ele é útil quando seu website possui URLs dinâmicas muito longas e desagradáveis, e você não consegue descobrir sobre o que trata a página apenas observando a URL.

Por exemplo, com o filtro avançado Pesquisar e substituir, você pode solicitar ao GA que substitua a seguinte URL:

https://www.exemplo.com/produtos/?cat=2341&pid=428

Por:

https://www.exemplo.com/jardim/vasos/

Assim o time de Marketing poderá identificar melhor as áreas do site na hora de criar relatórios.

Filtrar dados baseados em padrões complexos nos relatórios do Google Analytics

Por exemplo, a regex a seguir pode segmentar todo o tráfego de mídias sociais:

twitter\.com|facebook\.com|linkedin\.com|plus\.google\.com|reddit\.com|instagram\.com|youtube\.com|stackoverflow\.com|quora\.com
Filtro avançado usando regex para identificar algumas mídias sociais

Encontrando a origem de SPAM no Google Analytics

Por exemplo, você pode usar a seguinte regex (não é infalível) para filtrar todas as origens de SPAM no relatório Referrals:

127.0.0.1|justprofit.xyz|nexus.search-helper.ru|rankings-analytics.com|videos-for-your-business|adviceforum.info|video—production|success-seo|sharemyfile.ru|seo-platform|dbutton.net|wordpress-crew.net|rankscanner|doktoronline.no|o00.in
Filtro avançado usando regex para identificar alguma origens de SPAMERS

Bloquear origens de SPAM através de um Filtro personalizado no Google Analytics

Se você conseguiu identificar as origens de alguns SPAMERS em seus relatórios você pode bloquear que essas referências para que não sejam contabilizadas nos relatórios do Google Analytics:

Filtro excluindo a referência de spamers no Google Analytics

Usando expressões regulares para criar grupos de conteúdo no Google Analytics

Na imagem podemos usar uma regex na criação de uma grupo de conteúdo para acompanhar uma determinada categoria em um e-commerce.

Usando regex para criar grupos de conteúdo no Google Analytics

Usando expressões regulares para criar agrupamento de canais no Google Analytics

No caso eu posso agrupar os canais parceiros de Link Building, mas também pode ser usado para outros vários propósitos.

Agrupamento de canais usando expressão regular no Google Analytics

Usando expressões regulares para rastrear pesquisas realizadas sem o parâmetro de consulta na URL

Observe a seguinte URL:

https://www.americanas.com.br/busca/tv-65-polegadas-4k

Ao realizar uma busca nas Lojas Americanas o sistema não gera parâmetros de busca na URL, ela gera uma URL totalmente nova.

Você poderia usar a seguinte expressão regular:

\/busca\/(.*)
Regex para selecionar apenas URLs geradas a partir de uma busca

Para analisar todas as buscas seria necessário criar uma variável usando o Tag Manager e enviar para o Google Analytics, mas caso haja interesse eu escrevo sobre isso em um outro artigo.

Quais são as vantagens de usar o REGEX no Tag Manager?

Através de expressões regulares você pode configurar triggers (acionadores ou disparadores) avançados:

Se você quiser ter um Trigger para vários eventos personalizados, poderá usar uma regex com o nome do evento. Aqui, a regex faz distinção entre maiúsculas e minúsculas, portanto, tenha cuidado com os valores inseridos.

Usando regex para criar um “acionador” no Tag Manager

Você pode usar esse Trigger para acionar um evento ou função para criar um Público de perfis compradores no seu e-commerce.

Construindo uma expressão regular

Classe de caracteres

CARACTERE SIGNIFICADO
. (O ponto) corresponde um único caracter qualquer exceto os caracteres de nova linha: \n, \r, \u2028 ou \u2029. Note que a flag MULTILINE m não muda o comportamento do ponto. Então para corresponder um padrão por múltiplas linhas, o conjunto de caracteres [^] pode ser usado, que corresponderá qualquer caractere, incluindo novas linhas. Por exemplo, /.y/ corresponde my e ay, mas não yes, em yes make my day.
\d Corresponde um caractere de dígito no alfabeto (Latim). Equivalente a [0-9]. Por exemplo, /\d/ ou/[0-9]/ corresponde 2 em B2 é o número da suíte.
\D Corresponde qualquer caractere que não é um dígito no alfabeto baseado no Latim. Equivalente a [^0-9]. Por exemplo, /\D/ ou /[^0-9]/ corresponde B em B2 é o número da suíte.
\w Corresponde qualquer caractere alfanumérico do alfabeto baseado no Latim, incluindo o underline. Equivalente a [A-Za-z0-9_]. Por exemplo, /\w/ corresponde a em apple, 5 em $5.28, e 3 em 3D.
\W Corresponde qualquer caractere que não é um alfanumérico do alfabeto baseado no Latim. Equivalente a [^A-Za-z0-9_]. Por exemplo, /\W/ ou /[^A-Za-z0-9_]/corresponde % em 50%.
\s Corresponde um único caractere de espaço em branco, incluindo espaço, tabulação (tab), quebra de página, nova linha (LF) e outros espaços Unicode. Equivalente a: [\f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​\u202f\u205f​\u3000]. Por exemplo, /\s\w*/ corresponde bar em foo bar.
\S Corresponde um único caractere que não seja um espaço em branco. Equivalente a: [^\f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​\u202f\u205f​\u3000]. Por exemplo, /\S\w*/ corresponde foo em foo bar.
\t Corresponde uma tabulação.
\r Corresponde uma quebra de linha.
\n Corresponde uma nova linha.
\v Corresponde uma tabulação vertical.
\f Corresponde uma quebra de página.
[\b] Corresponde um carácter backspace. (Não confundir com \b).
\0 Corresponde um caractere NULL. Não coloque outro dígito seguinte a esse.
\cX Onde X é uma letra de A-Z. Corresponde um caractere de controle em uma string. Por exemplo, /\cM/ corresponde control-M em uma string.
\xhh Corresponde o caractere com o valor Unicode hh (dois dígitos hexadecimais).
\uhhhh Corresponde o caractere com o valor Unicode hhhh (quatro dígitos hexadecimais).
\ Para caracteres que são geralmente tratados literalmente, indica que o próximo caractere é especial e NÃO deve ser interpretado literalmente. Por exemplo,/b/ corresponde o caractere b. Colocando uma barra invertida antes do b, ou seja, usando /\b/, o caractere se torna especial, significando corresponder o limite de uma string. Para caracteres que são geralmente tratados especialmente, indica que o próximo caractere NÃO é especial e deve ser interpretado literalmente. Por exemplo, * é um caractere especial que corresponde a 0 ou mais ocorrências do caractere que o precede; por exemplo, /a*/ significa corresponder 0 ou mais ocorrências de a. Para corresponder * literalmente, preceda-o com uma barra invertida; por exemplo, /a\*/ corresponde a*.

Conjunto de caracteres

CARACTERE SIGNIFICADO
[xyz] Um conjunto de caracteres. Corresponde qualquer um dos caracteres cercados. Você pode especificar uma extensão de caracteres usando um hífen. Por exemplo, [abcd] é o mesmo que [a-d]. Eles correspondem o b em banco e o c[cci] em [cci]cortar.
[^xyz] Um conjunto de caracteres negativo ou complementado. Isto é, corresponde qualquer coisa que NÃO esteja cercada nos colchetes. Você pode especificar uma extensão de caracteres usando um hífen. Por exemplo, [^abc] é o mesmo que [^a-c]. Eles inicialmente correspondem n em banco e o em cortar.

Limites

CARACTERE SIGNIFICADO
^ Corresponde o início de uma entrada. Se a flag MULTILINE é utilizada, também corresponde imediatamente após um caractere de quebra de linha. Por exemplo, /^A/ não corresponde o A em an A, mas corresponde o primeiro A em An A.
$ Corresponde o fim de uma entrada. Se a flag MULTILINE é utilizada, também corresponde imediatamente antes de um caractere de quebra de linha. Por exemplo, /o$/ não corresponde o o em cantor, mas corresponde em canto.
\b Corresponde um limite de uma palavra sem espaço, como entre uma letra e um espaço (Não confundir com [\b]). Por exemplo, /\bno/ corresponde o no em de noite e /ly\b/ corresponde o ly em possibly yesterday.
  • \B: Corresponde a um limite que não inclui palavras sem espaço, como entre duas letras ou entre dois espaços. Por exemplo:

    • Antes do primeiro caractere de uma string;
    • Depois do último caractere de uma string;
    • Entre dois caracteres de uma palavra;
    • Entre dois caracteres que NÃO contém palavras;
    • Uma string vazia.

Por exemplo, /\Bte/ corresponde de em de noite, e /on\B/ corresponde on em possivelmente ontem.

Agrupamentos e Back References

CARACTERE SIGNIFICADO
(x) Corresponde x e memoriza o resultado da regex. Esses são chamados parênteses de captura. Por exemplo, /(foo)/ corresponde e memoriza foo em foo bar. A substring correspondida pode ser chamada novamente dos elementos do array resultante [1], …, [n] ou das propriedades predefinidas do objeto RegExp $1, …, $9. Grupos de captura têm uma falta na performance. Se você não necessita que a substring correspondida seja chamada novamente, prefira parênteses de não-captura (veja mais abaixo).
\n Onde n é um número inteiro positivo. Uma referência posterior à última correspondência da substring n em uma expressão regular (contando parênteses esquerdos). Por exemplo, /apple(,)\sorange\1/ corresponde apple, orange, emapple, orange, cherry, peach. Um exemplo mais completo está a seguir nesta tabela.
(?:x) Corresponde x mas não memoriza a correspondência. Esses são chamados parênteses de não-captura. A substring correspondida não pode ser chamada novamente dos elementos do array resultante [1], …, [n] ou das propriedades predefinidas do objeto RegExp $1, …, $9.

Quantificadores

CARACTERE SIGNIFICADO
x* Corresponde o item precedente x zero ou mais vezes. Por exemplo, /assusto*/ corresponde assustoooo em Um fantasma assustooooue assust em Não me assustei, mas não corresponde em Um bode grunhiu.
x+ Corresponde o item precedente x uma ou mais vezes. Equivalente a {1,}. Por exemplo, /o+/ corresponde o o em doce e todos os o em doooooooce.
x? Corresponde o item precedente x nenhuma ou uma vez. Por exemplo, /e?le?/ corresponde o el em angel e o le em angle. Se usado imediatamente após qualquer dos quantificadores *,?, ou { }. Faz o quantificador (coincidindo com o número mínimo de vezes), como oposto ao padrão (correspondendo ao número máximo de vezes). Também usado em asserções lookahead, descritas em (? =), (?!), E (? :) nesta tabela.
x(?=y) Corresponde x apenas se x é seguido por y. Por exemplo, /Jack(?=Sprat)/ corresponde Jack apenas se for seguido por Sprat. /Jack(?=Sprat|Frost)/ corresponde Jack apenas se for seguido por Sprat ou Frost. Porém, nem Sprat nem Frost são partes do resultado da correspondência.
x(?!y) Corresponde x apenas se x NÃO é seguido por y. Por exemplo,/\d+(?!\.)/ corresponde um número apenas se não for seguido por um ponto./\d+(?!\.)/.exec('3.141') corresponde 141, mas não 3.141.
x|y Corresponde ou x ou y. Por exemplo, /verde|vermelha/ corresponde verde emmaçã verde e vermelha em maçã vermelha.
x{n} Onde n é um número inteiro positivo. Corresponde exatamente a ocorrências do item precedente x. Por exemplo, /a{2}/ NÃO corresponde o a em candy, mas ele é todos os a em caandy, e os dois primeiros a em caaandy.
x{n,} Onde n é um número inteiro positivo. Corresponde pelo menos n ocorrências do item precedente de x. Por exemplo, /a{2,}/ NÃO corresponde o a em candy, mas corresponde a todos em caandy e em caaaaaaandy.
x{n,m} Onde n e m são números inteiros positivos. Deve corresponder pelo menos n e no máximo m ocorrências do item precedente de x. Por exemplo, /a{1,3}/ NÃO corresponde nada em cndy, corresponde o a em candy, corresponde os dois a em caandy, e os primeiros três a em caaaaaaandy. Note que quando estiver combinando caaaaaaandy, a correspondência é aaa, mesmo que a string original tenha mais a.

Detalhando as Expressões Regulares

Caractere de Escape \

\ O caractere de escape é usado para determinar como um caractere subsequente será interpretado.

Embora seja apenas um caractere de escape, você pode converter um caractere comum em metacaractere ou transformar um metacaractere meta em um caractere comum.

Por exemplo:

/ tem um significado especial na regex. É usado para marcar o início e o fim de uma expressão regular.

Por exemplo:

 var a = /colou?r/;

Se você quiser uma regex para tratar barra como uma barra \ e não como um caractere especial, então você precisa usá-lo junto com o caractere de escape como este: \/

Então, se você quiser isolar a string /shop/ na string /shop/category/men/.

Sua regex deve ser:\/shop

Se você usar a regex /shop, ela não corresponderá à string /shop/category/men/ porque / será tratado como um caractere especial em vez de uma barra.

Outro exemplo:

n é um caractere normal. Mas se você adicionar um caractere de escape antes dele, ele se tornará um metacaractere: \n será um novo caractere.

Então, se você quiser encontrar somente \n na string abcd\n3456.

Sua regex deve ser: \\n

Se você usar a regex abcd\n, não corresponderá à string abcd\n3456 porque \n seria tratado como um caractere especial em vez de um caractere normal.

Outro exemplo:

? É um metacaractere. Para torná-lo em um caractere normal, você precisa adicionar um caractere de escape antes: \?

Então se você quiser corresponder uma string com ponto de interrogação, por exemplo casar?.

Sua regex deve ser: casar\?

Se você usar casar? em uma regex, ela corresponderia somente à casar e não a string casar? pois ? será tratado como metacaractere.

Acento ^

^ = Isso é conhecido como acento circunflexo e é usado para marcar o início de uma expressão regular.

^\/Colou?r = Verifica se há um padrão que comece com /Color ou /Colour.

Exemplo:

/Colour/?proid=3456/review
/Color-red/?proid=3456/review

^\/Nov(ember)? = Verifique se há um padrão que comece com /Nov ou /November. Exemplo:

/November-sales/?proid=3456/review
/Nov-sales/?proid=3456/review

^\/elearning\.html = Procura um padrão que comece com /elearning.html. Exemplo:

/elearning.html/?proid=3456/review

^\/.*\.php = Verifica se há um padrão que comece com qualquer arquivo com a extensão .php. Exemplo:

/elearning.php/color/?proid=3456/review
/games.php/?proid=3456/
/a1.php/color/?proid=3456&gclid=153dwf3533

^\/product-price\.php = Verifica se há um padrão que comece com /product-price.php. Exemplo:

/product-price.php?proid=123&cid=2142
/product-price.php?cid=2142&gclid=442352df

^ também significa NÃO quando usado após um colchete de abertura

[^a] = Verifica se existe algum caractere diferente da letra minúscula a.

Por exemplo: a seguinte regex product-[^a] corresponderá:

/shop/men/sales/product-b
/shop/men/sales/product-c

[^1] = Verifica se existe algum caractere diferente do número 1.

Por exemplo: a regex proid=[^1] corresponderá:

/men/product-b?proid=3456&gclid=153dwf3533

Mas não corresponde a:

/men/product-b?proid=1456&gclid=153dwf3533

[^ab] = Verifica se existe algum caractere diferente das letras minúsculas a e b.

Por exemplo: a seguinte regex location=[^ab] corresponderá:

/shop/collection/prodID=141?location=canada

Mas não corresponde a:

/shop/collection/prodID=141?location=america
/shop/collection/prodID=141?location=bermuda

[^aB] = Verifique se existe algum caractere diferente da letra minúscula a e letra maiúscula B.

[^1B] = Corresponde a qualquer caractere diferente do número 1 e da letra maiúscula B.

[^Dog] = Corresponde a qualquer caractere diferente da seguinte sequência: letra maiúscula D, letra minúscula o e letra minúscula g.

Por exemplo: A seguinte regex location=[^Dog] corresponderá:

/shop/collection/prodID=141?location=canada
/shop/collection/prodID=141?location=denmark

Mas não corresponde a:

/shop/collection/prodID=141?location=Denver
/shop/collection/prodID=141?location=ontario
/shop/collection/prodID=141?location=greenland

[^123b] = Corresponde a qualquer caractere diferente dos seguintes caracteres: número 1, número 2, número 3 e letra minúscula b.

[^1-3] = Corresponde a qualquer caractere diferente do seguinte: número 1, número 2 e número 3.

Por exemplo: a seguinte regex prodID=[^1-3] corresponderá:

/shop/collection/prodID=45321&cid=1313
/shop/collection/prodID=5321&cid=13442

Mas não corresponde:

/shop/collection/prodID=12321&cid=1313
/shop/collection/prodID=2321&cid=1313
/shop/collection/prodID=321&cid=1313

[^0-9] = Verifica se há algum caractere diferente de um número.

Por exemplo: a regex de\/[^0-9] corresponderá a todas as páginas do diretório de/ cujo a string não seja iniciado por um número:

/de/school-london
/de/general/

Mas não corresponde a:

/de/12fggtyooo

[^a-z] = Corresponde a qualquer caractere único que não seja uma letra minúscula.

Por exemplo: a regex de\/[^a-z] corresponderá a todos os diretórios de/ cujo a string não comece com uma letra minúscula:

/de/1london-school
/de/?productid=423543

Mas não corresponde:

/de/school/london

[^A-Z] = Corresponde a qualquer caractere único que não seja uma letra maiúscula.

Dólar $

$ é usado para expressar o fim de uma expressão regular ou o final de uma linha. Por exemplo:

CARACTERE SIGNIFICADO
Colou?r$ Verifica se há um padrão que termine com Color ou Colour.
Nov(ember)?$ Verifica se há um padrão que termine com Nov ou November.
elearning\.html$ Procura um padrão que termine em elearning.html.
\.php$ Procura por um padrão que termine com .php.
product-price\.php$ Verifica se há um padrão que termine com product-price.php.

Colchetes [ ]

[ ] = Este colchete é usado para verificar qualquer caractere único em um conjunto de caracteres especificado entre [ ]. Por exemplo:

CARACTERE SIGNIFICADO
[a] Verifica se existe um único caractere que seja uma letra minúscula “a”.
[ab] Verifica se existe um único caractere que seja uma letra minúscula “a” ou “b”.
[aB] Verifica se existe um único caractere que seja uma letra minúscula “a” ou letra maiúscula “B”.
[1B] Verifica se existe um único caractere que seja um número “1” ou uma letra maiúscula “B”.
[Dog] Verifica se existe um único caractere que pode ser qualquer um dos seguintes caracteres: letra maiúscula “D”, letra minúscula “o” ou letra minúscula “g”.
[123b] Verifica se existe um único caractere que pode ser qualquer um dos seguintes caracteres: número “1”, número “2”, número “3” ou letra minúscula “b”.
[1-3] Verifica se existe um único caractere que pode ser qualquer um dos números 1, 2 e 3.
[0-9] Verifica se existe um único caractere que seja um numeral.
[a-d] Verifica se existe um único caractere que pode ser qualquer uma das seguintes letras minúsculas: “a”, “b”, “c” ou “d”.
[a-z] Verifica se existe um único caractere que seja uma letra minúscula.
[A-Z] Verifica se existe um único caractere que seja uma letra maiúscula.
[A-T] Verifica se há um único caractere que pode ser qualquer letra maiúscula de “A” à “T”.
[home.php] Procure por um único caractere que pode ser qualquer um dos seguintes caracteres: letra minúscula “h”, letra minúscula “o”, letra minúscula “m”, letra minúscula “e”, caractere especial “.” , letra minúscula “p”, letra minúscula “h” ou letra minúscula “p”.

Se você deseja verificar uma letra, independentemente do seu estado (maiúscula ou minúscula), use [a-zA-Z].

Parênteses ( )

( ) = Mais conhecido como parênteses, é usado para selecionar e verificar uma string. Por exemplo:

CARACTERE SIGNIFICADO
(a) Verificar a correspondência da string “a”
(ab) Verificar a correspondência da string “ab”.
(dog) Verificar a correspondência da string “dog”.
(dog123) Verificar a correspondência da string “dog123”.
(0-9) Verificar a correspondência da string “0-9”.
(A-Z) Verificar a correspondência da string “A-Z”.
(a-z) Verificar a correspondência da string “a-z”.
(123dog588) Verificar a correspondência da string “123dog588”.

( ) também é usado para criar e armazenar variáveis. Por exemplo, ^ (.*) $

Ponto de interrogação ?

? É usado para verificar zero (nenhuma ocorrência) ou uma ocorrência do caractere que o precede. Por exemplo:

CARACTERE SIGNIFICADO
[a]? Verifica se existe zero ou uma ocorrência de letra minúscula “a”.
[dog]? Verifica se existe zero ou uma ocorrência das letras minúsculas “d”, “o” ou “g”.
[^dog]? Verifique se existe zero ou uma ocorrência de um caractere que não sejam as letras minúscula “d”, “o” ou “g”.
[0-9]? Verifica se existe zero ou uma ocorrência de um número.
[^a-z]? Verifica se existe zero ou uma ocorrência de um caractere que não seja uma letra minúscula.
^casa?r$ Verifica a ocorrência da string “casa” ou “casar”.
^Nov(ember)28(th)?$ Verifica a ocorrência das seguintes strings “nov 28”, “november 28”, “Nov 28th” e “November 28th”.

? quando usado dentro de uma expressão regular, transforma uma letra ou um conjuntos de letras que o precede em opcional.

Por exemplo, a expressão regular: ^casa?r$ corresponde tanto a “casa” como a “casar”. Da mesma forma, a expressão regular: ^Nov(ember)28(th)?$ corresponde a: “nov 28”, “november 28”, “Nov 28th” e “November 28th”.

Sinal de +

+ É usado para verificar uma ou mais ocorrências do caractere que o precede. Por exemplo:

CARACTERE SIGNIFICADO
[a]+ Verifica uma ou mais ocorrências de letra minúscula “a”.
[dog]+ Verifica uma ou mais ocorrências de letras “d”, “o” ou “g”.
[548]+ Verifica uma ou mais ocorrências de números “5”, “4” ou “8”.
[0-9]+ Verifica um ou mais números.
[a-z]+ Verifica uma ou mais letras minúsculas.
[^a-z]+ Procura por um ou mais caracteres que não sejam letras minúsculas.
[a-zA-z]+ Procura por qualquer combinação de letras maiúsculas e minúsculas.
[a-z0-9]+ Procura por qualquer combinação de letras minúsculas e números.
[A-Z0-9]+ Procura por qualquer combinação de letras minúsculas e números.
[^9]+ Procura por um ou mais caracteres que não sejam o número 9.

Asterisco *

* É usado para verificar qualquer número de ocorrências (incluindo zero ocorrências) do caractere que o precede.

Por exemplo, 31* corresponderia a 3, 31, 311, 3111, 31111 etc.

Ponto .

. É usado para verificar um único caractere (qualquer caractere que possa ser digitado no teclado que não seja um caractere de quebra de linha (\n)).

Por exemplo, a expressão regular: Action ., Scene2 corresponderia:

  • Action 1, Scene2
  • Action A, Scene2
  • Action 9, Scene2
  • Action &, Scene2

Mas não corresponderia:

  • Action 10,Scene2
  • Action AB,Scene2

Barra Vertical |

| Numa expressão regular é interpretado por “OU” na lógica de uma regex. Por exemplo:

  • (dele|dela) = Verifica a ocorrência da string “dele” ou “dela”.
  • dele|dela = Verifica a ocorrência da string “dele” ou “dela”.

Por exemplo, a regex dele|dela vai corresponder:

  • Este é o livro dele
  • Este é o livro dela
  • Dele ou Dela
  • Dela ou Dele

Exclamação !

! – Numa expressão regular é interpretado por “NÃO” na lógica de uma regex. Mas ao contrário de ^ (circunflexo), o ! é usado apenas no início de uma regra ou condição. Por exemplo:

  • (!abc) = Procura por uma string que não seja a string “abc”.
  • [!0-9] = Verifica se existe um único caractere que não seja um número.
  • [!a-z] = Verifica se existe um único caractere que não seja uma letra minúscula.

Sinal de chaves { }

{ } é usado para verificar uma ou mais ocorrências do caractere anterior.

É como o metacaractere +, mas fornece controle sobre o número de ocorrências do caractere que você deseja corresponder na regex.

Por exemplo:

CARACTERE SIGNIFICADO
1{1} Verifica uma ocorrência do caractere “1”. Esta regex corresponderá a string “1”.
1{2} Verifica por duas ocorrências do caractere “1”. Este regex vai corresponder a string “11”.
1{3} Verifica por três ocorrências do caractere “1”. Este regex corresponderá a string “111”.
1{4} Verifica se existe quatro ocorrências do caractere “1”. Este regex corresponderá a string “1111”.
1{1,4} Verifica por 1 a 4 ocorrências do caractere “1”. Esta regex corresponderá a 1,11, 111, 1111.
[0-9]{2} Verifica se há duas ocorrências de um número ou, em outras palavras, verifique se há dois dígitos como, por exemplo, o número “12”.
[0-9]{3} Verifica por 3 ocorrências de um número ou em outras palavras, verifique se há três dígitos como, por exemplo, o número “123”.
[0-9]{4} Verifica se há 4 dígitos como, por exemplo, o número “1234”.
[0-9]{1,4} Procura um número de 1 a 4 dígitos.
[a]{2} Verifica se há duas ocorrências do caractere “a”. Esta regex corresponderá a string “aa”.
[a]{3} Procura por 3 ocorrências do caractere “a”. Este regex corresponderá a string “aaa”.
[a]{4} Verifica se há 4 ocorrências do caractere “a”. Este regex corresponderá s tring “aaaa”.
[a]{1,4} Procura de 1 à 4 ocorrências do caractere “a”. Esta regex corresponderá as strings “a”, “aa”, “aaa”, “aaaa”.
[a-z]{2} Procura por 2 ocorrências de uma letra minúscula. Este regex vai corresponder as strings “aa”,”bb”, “cc” e etc.
[A-Z]{3} Procura por 3 ocorrências de uma letra maiúscula. Este regex vai corresponder as strings “AAA”, “BBB”, “CCC” e etc.
[a-zA-Z]{2} Procura por 2 ocorrências de uma letra (não importando se é maiúscula ou minúscula). Este regex vai corresponder a “aa”, “aA”, “Aa”, “AA” e etc.
[a-zA-Z]{1,4} Procura de uma à 4 ocorrências de uma letra (não importando se é maiúscula ou minúscula). Este regex corresponderá: “aaaa”, “AAAA”, “aAAA”, “AAAa” e etc.
(rock){1} Procura por uma ocorrência da string “rock”. Este regex irá corresponder a: “rock”.
(rock){2} Procurar por duas ocorrências da string “rock”. Este regex corresponderá: “rockrock”.
(rock){3} Procura por 3 ocorrências da string “rock” . Este regex corresponderá: “rockrockrock”.
(rock){1,4} Verifica de 1 à 4 ocorrências da string “rock”. Este regex corresponderá: “rock”, “rockrock”, “rockrockrock”, “rockrockrockrock”.

Espaço em branco ou vazio

Para criar um espaço em branco em uma expressão regular, basta usar um espaço em branco. Por exemplo:

(Chuck Norris) = Irá corresponder a string “Chuck Norris”.

Invertendo Regex em JavaScript

Inverter um regex significa inverter seu significado. Você pode inverter um regex em JavaScript usando lookaheads positivos e negativos.

Use lookahead positivo se quiser corresponder a algo que é seguido por uma outra coisa. Use lookahead negativo**** se quiser corresponder a algo não seguido por uma outra coisa.

  • Lookahead positivo começa com (?= seguido de).
  • Lookahead negativo começa com (?! seguido de).

Por exemplo: a regex de\/[^a-z] corresponderá a todas as URLs da pasta de/ cujo nome NÃO comece por uma letra minúscula. Exemplo:

/de/1london-school
/de/?productid=423543

Mas irá corresponder a:

/de/school/london

O inverso desta expressão regular seria: corresponder a todas as URLs na pasta de/ cujo nome começa com uma letra minúscula:

Por exemplo: o regex de\/(?![^a-z]) corresponderá:

/de/school/london

Mas não corresponde:

/de/1london-school
/de/?productid=423543

A Regex do JavaScript suporta apenas lookaheads e não lookbehind. O Google Analytics não suporta lookahead ou lookbehind.

Outros exemplos de Regex

CARACTERE SIGNIFICADO
^(*\.html)$ Verifica qualquer ocorrência de caracteres que precede .html e os armazena em uma variável.
^dog$ Procura a string “dog”.
^a+$ Verifica a ocorrência de uma ou mais letras minúsculas “a”.
^(abc)+$ Verifica uma ou mais ocorrências da string “abc”.
^[a-z]+$ Verifica uma ou mais ocorrências de uma letra minúscula.
^(abc)*$ Verifica qualquer número de ocorrências da string “abc”.
^a*$ Verifica qualquer número de ocorrências da letra minúscula “a”.

Com encontrar todos os arquivos que começam com “elearning” e que têm a extensão de arquivo .html. Regex: ^elearning*\.html$

Como encontrar todos os arquivos PHP. Regex: ^*\.php$

Testando as expressões regulares (RegEx)

Se você se considera iniciante ou experiente no uso de regex, você deve sempre testar suas expressões regulares.

Você pode testar expressões regulares através de:

  • Extensão cromo do RegExp Tester;
  • Ferramenta on-line Regex101.com;
  • O filtro de tabela avançada na interface de relatórios no GA com a opção Regex;
  • Recurso de visualização do seu segmento personalizado no GA;
  • Janela de console de depuração do GTM para testar a regex usada em gatilhos e variáveis;
  • Usando RegExpObject para testar o regex no GTM durante o tempo de execução.

Testando a Regex #1: Extensão chrome RegExp Tester

O RegExp Tester é uma extensão do Chrome usada para criar e validar expressões regulares:

RegExp Tester

Na expressão regular abaixo, o resultado da pesquisa destacada (ou seja, carros usados) é o padrão que corresponde a minha regex.

A função da regex é filtrar dois conjuntos de strings separados por espaço.

RegExp Tester

Veja como usar esse filtro para filtrar keywords de cauda longa no Google Analytics.

Testando a Regex #2: Ferramenta on-line Regex101.com

Regex101.com é uma ferramenta online usada para criar e testar expressões regulares. Confira a interface da ferramenta Regex101:

Regex101 usado para procurar com um conjunto de 3 strings separadas por espaço

Use o “FLAVOR” como JavaScript, pois o Google Analytics aceita a expressão regular POSIX do JavaScript.

Testando a Regex #3: Filtro avançado de relatórios no GA

Você pode criar e testar o regex no Google Analytics usando o filtro avançado na interface de relatórios com a opção Regex:

Filtro avançado no Google Analytics

Testando a Regex #4: pré-visualização do recurso de segmento personalizado no GA

Você pode criar e testar sua regex no Google Analytics usando o recurso de visualização em um segmento personalizado:

Segmento personalizado no Google Analytics

Testando a Regex #5: Janela do console de depuração do GTM

Para o GTM, você pode usar a janela do console de depuração para testar o regex usado em gatilhos e variáveis:

Ferramenta de teste e depuração do Tag Manager

Testando a Regex #6: usando “RegExp” para testar o regex no GTM durante o tempo de execução

RegExp é um objeto da expressão regular que é usado para armazenar uma expressão regular em JavaScript. Por exemplo:

var regex = /^\/search\/(.*)/;

Ou seja: “regex” (usada como uma variável) é um objeto de uma expressão regular que é usado para armazenar a expressão regular /^\/search\/(.*)/.

Métodos .test e .exec do objeto RegExp:

Tanto .test quanto .exec são os métodos do objeto RegExp e são usados com frequência no Tag Manager (Gerenciador de Tags do Google) para testar expressões regulares usando o tempo de execução.

O método .test é usado para testar uma correspondência de uma regex em uma string.

Ele retorna um valor booleano: true se encontrar uma correspondência, caso contrário, retorna false.

Exemplo: RegExpObject.test (string a ser pesquisada)

Por exemplo:

function() {
var regex = /^\/search\/(.*)/;
var pagePath = '/search/enhanced ecommerce tracking/';
if(regex.test(pagePath)
{
var searchTerm = regex.exec(pagePath)[1];
var NewUri = "/search/?s=" + searchTerm;
return NewUri;
}
return false;
}

O método exec (como em regex.exec) também testa uma correspondência em uma string.

Mas ao contrário de test, ele retorna um array[^array] que contém o texto correspondente, se encontrar a correspondência.

[^array]: Array é uma estrutura de dados que armazena uma coleção de elementos de tal forma que cada um dos elementos possa ser identificado por, pelo menos, um índice ou uma chave.

Caso contrário, retorna um null.

Exemplo: RegExpObject.exec (string a ser pesquisada).

O método exec retorna um array de todo o texto correspondente.

Então, para a regex:

^\/search\/(.*)
// e
pagePath = /search/enhanced ecommerce tracking/
regex.exec(pagePath) = [ ‘/search/enhanced ecommerce tracking/’, ‘enhanced ecommerce tracking/’];
regex.exec(pagePath)[0] = [ ‘/search/enhanced ecommerce tracking/’];
regex.exec(pagePath)[1] = [‘enhanced ecommerce tracking/’];

Então é isso! Se você gostou do artigo e achou útil para você, deixe seu comentário abaixo.