RegEx - Expressões Regulares
As Expressões Regulares são mecanismos de pesquisa / substituição que diversos fabricantes de software implementam em suas soluções e por isso exite algumas variações ou diferenças entre um mecanismo de um ou de outro fabricante.
Toda expressão regular é usada para 'testar/procurar/substituir' um ou mais caracteres de um string. Portanto, para testar expressão regular precisamos de um string de teste.
Uma expressão regular em sí é uma sequência de caracteres que forma um padrão de pesquisa.
Ao pesquisar dados em um texto, você pode usar esse padrão de pesquisa para descrever o que está procurando.
Uma expressão regular pode ser um caractere único ou um padrão mais complicado.
Expressões regulares podem ser usadas para executar todos os tipos de operações de pesquisa e substituição de texto.
RegEx é uma ferramenta que permite executar uma série de funcionalidades de procura, substituição de texto da maneira mais rápida e eficiente possível.
Estaremos abordando neste documento o RegEx do JavaScript e muitos dos testes foram feitos no RegEx do Visual Studio e em outras ferramentas.


O RegEx permite:
1-Procurar se um conjunto de caracteres se repete em um string.
2-Permite moldar em sua sintaxe estilos que farão a verficação de campos como, por exemplo, se um email válido e para isto o campo tem que ter um @ e uma extensão .com ou .org ou .com.br.
3-As expressóes regulares permitem verificar se um campo é texto, numérico, minúsculo, maiúsculo, etc.
4-Permite efetuar pesquisas complexas em cadeias de caracteres com rapidez e eficiência.


No JavaScript, expressões regulares são frequentemente usadas com os dois métodos de string: search () e replace ().
O método search() usa uma expressão para procurar uma correspondência e retorna a posição da correspondência.
O método replace() retorna uma string modificada onde o padrão é substituído.

Sintaxe Padrão:

/padrão/modificadores;





Caso precise fazer mais testes que os desta página consulte:    Site1 para teste de Expressão regulares-regex101
ou      Site2 para teste de Expressão regulares-regextester

Exemplos :

A utilização das expressões regulares facilita muito a pesquisa de strings que de outra maneira seria muito mais dificil de ser feita e, com certeza, menos eficiente.

Neste exemplo citamos a facilidade numa busca com o RegEx- um string dentro do outro mas case insensitive :
/w3schools/i     é uma expressão regular.
w3schools      é um padrão a ser usado na busca ( uma sequencia de caracteres).
i                     é um modificador que torna a busca case-insensitive.


Testando no mundo real. Faremos uma pesquisa sem o RegEx.
Exemplo 1 - Fazendo uma pesquisa de string dentro de string sem o RegEx :
Vamos procurar um string dentro do outro:
function TesteExemplo1() {
    var str = "Visite a Disney!";
    var n = str.search("Disney");
    alert(n);
}
<button value="Teste Exemplo 1" onclick="TesteExemplo1();"></button>


Para acionar o teste clique no botão :   

Vimos que a procura ocorreu com sucesso e retornou 9 ( na décima posição pois o string começa na posição 0).

Mas supondo que fosse um dado que o usuário digitou. Ele poderia digitar de maneira diferente.
Exemplo 2 - Pesquisa de string dentro de String sem RegEx com Case diferentes :
Vamos procurar um string dentro do outro:
function TesteExemplo2() {
& nbsp;    var str = "Visite a Disney!";
    var n = str.search("disney");
    alert(n);
}
<button value="Teste Exemplo 2" onclick="TesteExemplo2();"></button>


Para acionar o teste clique no botão :   

Vimos que a procura ocorreu com erro retornando -1 porque existe o string Disney não o string disney.

Agora vamos supor que queremos que a pesquisa seja feita com qualquer combinação de letras, maiúsculas, minúsculas, etc. Faremos isso com uma expressão regular.
Exemplo 3 - Fazendo pesquisa de string dentro de string com RegEx case insensitive:
Vamos procurar um string dentro do outro:
function TesteExemplo3() {
& nbsp;    var str = "Visite a DiSnEy!";
    var str.search(/disney/i);
    alert(n);
    var str.search(/Disney/i);
    alert(n);
}
<button value="Teste Exemplo 3" onclick="TesteExemplo3();"></button>


Para acionar o teste clique no botão :   

Vimos que a procura ocorreu com sucesso ignorando maiúsculas e minúsculas.

Componentes do RegEx

Caracteres delimitadores:

Caractere Significado
[x] Abre e fecha colchetes denota que o item é um conjunto de caracteres e não um string.
Importante : se a pesquisa for feita com o padrão [Antonio] na realidade NÃO será feita pelo string Antonio mas sim pelos caracteres A, n, t, o, n, i, o.
/x/ Denota uma pesquisa por um string especifico.Ex: /causando/
^ Denota que a procura será feito pelo inicio do texto. Se a flag multilinha é utilizada, também corresponde imediatamente após um caractere de quebra de linha.
Por exemplo, ao pesquisar /^U/ em "um Um" retornaria falso, mas em "UM UM" retornaria verdadeiro".
Importante : Na expressão [^a-z] o ^ tem outro significado, o de negação. Procura por algo que não seja de a a z.
$ Corresponde o fim de uma entrada. Se a flag multilinha é utilizada, também corresponde imediatamente antes de um caractere de quebra de linha.
Por exemplo, ao pesquisar por /o$/ em "cantor" resultaria false mas fazendo a mesma pesquisa em "canto" teríamos true.
\b Corresponde um limite da palavra, como entre uma letra e um espaço. (Não confundir com [\b])
Por exemplo, ao pesquisarmos por /\bno/ em "de noite" teríamos um resultado "no"
e ao pesquisarmos por "/te\b/" em "possivelmente ontem" resultaria "te".
B Corresponde um limite de uma não palavra, como entre duas letras ou entre dois espaços.
Por exemplo, ao procurarmos por /\Bte/ em "de noite" resultaria "te",
pessquisando por /on\B/ em "possivelmente ontem" resultaria "on".


Modificadores RegEx:

Modificador Descrição
i Executar correspondência que não diferencia maiúsculas de minúsculas
g Realize uma correspondência global (encontre todas as correspondências em vez de parar após a primeira)
m Executar procura multilinha


Padrões RegEx:
Expressão Descrição
/abc/ Encontre o string abc
[abc] Encontre qualquer um dos caracteres entre colchetes
[^abc] Encontre qualquer um dos caracteres que NÃO esteja entre os do colchetes
[0..9] Encontre qualquer um dos dígitos entre os colchetes. Qualquer não digito numérico.
[^0..9] Encontre qualquer um dos dígitos que NÃO esteje entre os colchetes
(x|y) Encontre qualquer uma das alternativas separadas por |


Metacaracteres ( são caracteres com um significado especial ):

MetaCaractere Descrição
.(ponto) É o caractere coringa e é usado para indicar qualquer caractere.
Encontre um único caractere, exceto nova linha ou terminador de linha.
(O ponto) corresponde um único caracter qualquer exceto os caracteres de nova linha: \n, \r, \u2028 ou \u2029.
Note que a flag multilinha 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".
\0 Procurar por caractere null. Não coloque outro dígito seguinte ao null.
\b Encontre uma correspondência no início de uma palavra como : \bPalavra ou no final da palavra como: Palavra\b.
(Não confundir [b](este Metacaractere) com \b (backspace)
\B Encontre uma correspondência NÃO esteja no início de uma palavra como : \BPalavra ou que NÃO esteja no final da palavra como: Palavra\B
\cX \c significa Control e X é uma letra de A - Z. Portanto neste exemplos iremos pesquisar por control+X
Por exemplo, /\cM/ corresponde control-M em uma string. .
\d Encontre um dígito numérico (pode ser de 0 a 9).
Corresponde um caractere de dígito no alfabeto basic Latin. Equivalente a [0-9].
Por exemplo, se fizermos /\d/ ou /[0-9]/ de "B2" teremos o resultado "2" porque 2 é o número do conjunto de caracteres pesquisado." .
\D Encontre um dígito NÃO numérico (diferente de 0 a 9).
Corresponde qualquer caractere que não é um dígito no alfabeto basic Latin. Equivalente a [^0-9].
Por exemplo, Se procurarmos /\D/ ou /[^0-9]/ em "B2" o resultado será "B" porque é o primeito NÃO Número da suite de caracteres pesquisada".
\f Procurar pelo Caractere form feed (FF, 12, 0x0C)
\n Procurar pelo Caractere New Line (LF, 10, 0x0A)
\r Procurar pelo Caractere Carriage Return (CR, 13, 0x0D)
\s Encontre um caractere de espaço em branco.
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, ao procurarmos /\s\w*/ em "palhaço panaca" teremos a resposta " panaca" (/s acha o espaço e /w* traz o que resta do string).
\S Encontre um caractere que NÃO seja espaço em branco.
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, pesquisar /\S\w*/ em "palhaço panaca" teremos a resposta "palhaço" (\S procura até achar o espaço e w* retorna todos os strings que encontrar até o espaço.
\t Encontre um caractere de tabulação horizontal(TAB,9,0x09)
\uxxxx Encontre o caractere Unicode especificado pelo número hexadecimal xxxx
\v Encontre um caractere de tabulação vertical (VT,11,0x0B)
\W Encontre um Não caractere.
Corresponde qualquer caractere que não é um alfanumérico do alfabeto basic Latin. Equivalente a [^A-Za-z0-9_].
Por exemplo, ao pesquisar por /\W/ ou /[^A-Za-z0-9_]/ em "50%" teremos a resposta "%".
\w Encontre um caractere qualquer.
Corresponde qualquer caractere alfanumérico do alfabeto basic Latin, incluindo o underline. Equivalente a [A-Za-z0-9_].
Por exemplo, ao pesquisar /\w/ em "apple" teremos a resposta "a" ,
em "$5.28" teremos a resposta "5",
em e "3D" teremos a resposta "3".
\xxx Encontre um caractere especificado pelo número octal
\xdd Encontre um caractere especificado pelo número hexadecimal
\ 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 palavra.
ou
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 significa 0 ou mais ocorrências do caractere precedente devem ser correspondidas; por exemplo, /a*/ significa corresponder 0 ou mais "a"s.
Para corresponder * literalmente, preceda-o com uma barra invertida; por exemplo, /a\*/ corresponde "a*".


Quantificadores (definem quantidades ):

Quantificador Descrição
n+ Corresponde a qualquer sequência que contenha pelo menos um n
n* Corresponde a qualquer sequência que contenha zero ou mais ocorrências de n
n? Corresponde a qualquer sequência que contenha zero ou uma ocorrência de n
n{X} {X} é um número exato de caracteres. Corresponde a qualquer sequência que contenha uma sequência de X n's
n{X,Y} X indica o número mínimo e Y o número máximo de caracteres. Corresponde a qualquer sequência que contenha uma sequência de X a Y caracteres n
n{X,} Pelo menos X ocorrências do caractere n. Corresponde a qualquer sequência que contenha uma sequência de pelo menos X n
n$ Corresponde a qualquer string com n no final dela
^n Corresponde a qualquer string com n no início
?=n Corresponde a qualquer sequência que é seguida por uma sequência específica n
?!n Corresponde a qualquer sequência que não é seguida por uma sequência específica n


Propriedades do Objeto RegEx :

Propriedade Descrição
constructor Retorna a função que criou o protótipo do objeto RegExp
global Verifica se o modificador "g" está definido
ignoreCase Verifica se o modificador "i" está definido
lastIndex Especifica o índice no qual iniciar a próxima correspondência
multiline Verifica se o modificador "m" está definido
source Retorna o texto do padrão RegExp


Métodos do Objeto RegEx :

Método Descrição
compile() Descontinuado na versão 1.5. Compila uma expressão regular.
exec() Testa uma correspondência em uma sequência. Retorna a primeira correspondência
test() Testa uma correspondência em uma sequência. Retorna verdadeiro ou falso
toString() Retorna o valor da string da expressão regular





Usando a função test()


O método test () é um método de expressão RegExp.
Ele procura um padrão em uma sequência e retorna verdadeiro ou falso, dependendo do resultado.

Exemplo 4 : O exemplo a seguir pesquisa uma string pelo caractere "e" e deve encontrar :
function FuncaoTestEx4() {
    var patt = /e/;
    alert(patt.test("As melhores coisas da vida são grátis!"));
}
<button value="Teste Exemplo 4" onclick="FuncaoTestEx4();">Clique aqui para testar o Exemplo 4</button>


Para acionar o teste4 clique no botão :   

Importante : Como ele encontra o que esta pesquisando retorna true.

Exemplo 5 : O exemplo a seguir pesquisa uma string pelo caractere "z" e NÃO deve encontrar:
function FuncaoTestEx5() {
    var patt = /z/;
    alert(patt.test("As melhores coisas da vida são grátis!"));
}
<button value="Teste Exemplo 5" onclick="FuncaoTestEx5();">Clique aqui para testar o Exemplo 5</button>


Para acionar o teste5 clique no botão :   

Importante : Quando este método não encontra o que esta sendo pesquisado retorna false.



Usando o método exec()

O método exec () é um método de expressão RegExp.
Ele procura em uma sequência um padrão especificado e retorna o texto encontrado como um objeto.
Se nenhuma correspondência for encontrada, ele retornará um objeto vazio (nulo).


Exemplo 6 : O exemplo a seguir pesquisa uma string pelo caractere "e" e encontra :
function FuncaoExec1() {
    alert(/e/.exec("As melhores coisas da vida são grátis!"));
}



Importante : Como ele encontra o que esta pesquisando retorna exatamente o que foi solicitado para procurar.

Exemplo 7 : O exemplo a seguir pesquisa uma string pelo caractere "z" e NÃO encontra :
function FuncaoExec2() {
    alert(/z/.exec("As melhores coisas da vida são grátis!"));
}



Importante : Quando este método não encontra o que esta sendo pesquisado retorna null.


Exemplo 8 :
Suponhamos que tenhamos a expressão RegEx : const re1 = /olá/ ou const re1 = new RegExp('olá').
Se fizermos a pequisa : re1.test('olá') o resultado será encontrado.
re1.test('blablabla olá blablabla') o resultado será encontrado.
re1.test('ol') o resultado não será encontrado porque a palavra teste é menor que a expressão RegEx.
re1.test('blablabla') o resultado não será encontrado porque a expressão RegEx não tem bla.

Testando se a palavra começa com (Operador ^):
Se testarmos /^olá/.test('olá') será encontrado Mas se testarmos /^olá/.test('dei um olá') ele não será encontrado.



Resumo das principais pesquisas feitas com o RegEx

Importante : Se na pesquisa for encontrada uma letra e milhares não batem ele retornará true. O que vale é que encontrou.
Lembre-se que o RegEx é case sensitive.
O RegEx só trabalha com texto e caracteres. Portanto ele nunca vai procurar 0 numérico.
Padrão Utilidade
[t] Procura por uma letra(t)
[thjd] Procura pela letra t ou pela letra h ou j ou d.
[a-z] Procurar pelas letras de a a z.
[A-Z] Procurar pelas letras A a Z.
[0-9] Procurar pelos números de 0 a 9
[a-zA-Z0-9] Procura pelas letras de a a z, e pelas letras de A a Z e pelos números de 0 a 9.
[^a-z] Procura por letras que NÃO sejam de a a z.
a.k Procura por uma sequencia de letras a.k onde . pode ser qualquer letra
sep[aq]r[as]d[ax]mente Pesquisa por uma palavra com erros de grafia
\u20AC Procura pelo simbolo de Dinheiro Euro (€). (0xA9)Copyright(©)
\cA Procura por Control+A
\v Procura pelo caractere Vertical Tab-CHR 8 na tabela ASC. ("\f = Form Feed CHR 12), (\e = escape CHR 18), (\n = Line Feed CHR 10), (\r = Carriage Return CHR 13), (\t = tab CHR 9),
1\+1=2 Como + é um meta-caractere precisamos colocar um \ antes dele para que seja exibido como apenas um simbolo e não um meta-caractere (Expressão 1+1=2)
^c Procura se a palavra começa com a letra c. Pode ser uma sequencia de caracteres.(^ = começo)
s$ Procura por uma palavra que termine com a letra s ($ = fim)
x\b Procura pelo caractere x e por um espaço ou fim do string
\Bte Significa que estamos procurando pelos caracteres te mas que antes tenha algum caractere, Não pode ser nem espaço nem nenhum caractere de controle.
/Disney/ Procura pelo String Disney. Uma letra diferente ele não achará.
/disney/i Pesquisar pelo string Disney sem levar em conta o case das letras.
\d Procura por um caractere númerico, um dígito de 0 a 9.
\D Encontre um dígito não numérico ( não seja 0 a 9 )
/w Procura por um caractere qualquer. Estão fora: !@#$%¨&*()-+=[{´`^~]}:;/?\|. Vale de a a z,A a Z, 0 a 9.
/W Procura por um NÃO caractere, ou seja, !@#$%¨&*()-+=[{´`^~]}:;/?\|. Estão fora a a z,A a Z, 0 a 9.
n+ Procura por um string que tenha pelo menos um caractere n.
\d{5} \d especifica que é um dígito numérico e {5} especifica que são 5 dígitos numéricos
[012]\d [012] determina quais são os digitos aceitos e \d especifica que é um dígito numérico
[A-Z]{3}-\d{4} Número da plaa de automóvel no Brasil - 3 letras e 4 dígitos numéricos






Teste da Função de pesquisa ( test ) :

String:    Padrão RegEx:       Resultado: