[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/RegExp [Back]  [Original]

RegExp - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

RegExp

Baseline Widely available *

This feature is well established and works across many devices and browser versions. Its been available across browsers since julho de 2015.

* Some parts of this feature may have varying levels of support.

Sumrio

O construtor RegExp cria um objeto de expresso regular para realizar uma correspondncia de texto com um padro.

Para uma introduo expresses regulares, leia o captulo de Expresses Regulares no Guia de JavaScript.

In this article

Construtor

Notaes literais e de construtores so possveis:

/padro/flags
new RegExp(padro[, flags])
RegExp(padro[, flags])

Parmetros

padro

O texto da expresso regular, ou como em ES5, outro objeto RegExp. Os padres podem incluir caracteres especiais para correspondencia em um intervalo maior de valores do que uma string literal.

flags

Se especificado, flagsindica os marcadores que podem ser adicionados, ou se um objeto suficiente para o padro, os valores de flags sero substituidos por qualquer uma das flags de objetos. O valor de flags uma string contendo qualquer combinao dos seguintes valores:

g

corresponder globalmente; acha todas as correspondncias em vez de parar aps achar a primeira

i

ignorar maisc./minsc.; Se a flag u estiver ativa, deve ser utilizado o Unicode case folding

m

multilinha; trata caracteres de incio e fim (^ e $) ao operar sobre mltiplas linhas (ou seja, corresponder o incio ou fim de cada linha (delimitado por \n ou \r), e no apenas o comeo ou fim de toda a string de entrada)

u

unicode; trata o padro como uma sequncia de cdigo unicode

y

aderente; corresponde apenas pelo index indicado pela propriedade lastIndex dessa expresso regular na string alvo (e no tenta corresponder de qualquer indexes posteriores).

Descrio

H dois modos de criar um objeto RegExp: uma notao literal e um construtor. Para indicar strings, os parmetros para a notao literal no usam aspas, enquanto os parmetros para a funo do construtor usam. Ento, as seguintes expresses criam a mesma expresso regular:

js
/ab+c/i;
new RegExp("ab+c", "i");

A notao literal compila a expresso regular em tempo de execuo. Use a notao literal quando a expresso regular permanecer constante. Por exemplo, se voc usar a notao literal para construir a expresso regular usada em um loop, a expresso regular no ser recompilada a cada iterao

O construtor do objeto da expresso regular, por exemplo, new RegExp('ab+c'), fornece uma compilao em tempo de execuo da expresso regular. Use a funo construtora quando voc sabe que o padro da expresso regular ser mudado, ou voc no sabe o padro e o est recebendo de outra fonte, como uma entrada do usurio.

Comeando com ECMAScript 6, new RegExp(/ab+c/, 'i'), deixou de lanar um TypeError ("can't supply flags quando constructing one RegExp from another") quando o primeiro argumento um RegExp e o segundo argumento flags est presente. Uma nova RegExp dos argumentos criada ao invs disso.

Quando se usa a funo construtora, as regras de escapar em uma string (preceder caracteres especiais com \ quando includos na string) so necessrias. Por exemplo, as declaraes a seguir so equivalentes:

js
var re = /\w+/;
var re = new RegExp("\\w+");

Significado dos caracteres especiais nas expresses regulares

Classes 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 multilinha m no muda o comportamento do ponto. Ento para corresponder um padro por mltiplas linhas, o conjunto de caracteres [^] pode ser usado, que corresponder qualquer caractere, incluindo novas linhas.

Por exemplo, /.y/ corresponde "my" e "ay", mas no "yes", em "yes make my day".

\d

Corresponde um caractere de dgito no alfabeto basic Latin. Equivalente a [0-9].

Por exemplo, /\d/ ou /[0-9]/ corresponde "2" em "B2 o nmero da sute".

\D

Corresponde qualquer caractere que no um dgito no alfabeto basic Latin. Equivalente a [^0-9].

Por exemplo, /\D/ ou /[^0-9]/ corresponde "B" em "B2 o suite number".

\w

Corresponde qualquer caractere alfanumrico do alfabeto basic Latin, 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 no um alfanumrico do alfabeto basic Latin. Equivalente a [^A-Za-z0-9_].

Por exemplo, /\W/ ou /[^A-Za-z0-9_]/ corresponde "%" em "50%".

\s

Corresponde um nico caractere de espao em branco, incluindo espao, tabulao (tab), quebra de pgina, nova linha (LF) e outros espaos 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 no seja um espao 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 tabulao.
\r Corresponde uma quebra de linha.
\n Corresponde uma nova linha.
\v Corresponde uma tabulao vertical.
\f Corresponde uma quebra de pgina.
[\b] Corresponde um caracter backspace. (No confundir com \b)
\0 Corresponde um caractere NUL. No coloque outro dgito 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 cdigo hh (dois dgitos hexadecimais).
\uhhhh Corresponde o caractere com o valor Unicode hhhh (quatro dgitos hexadecimais).
\

Para caracteres que so geralmente tratados literalmente, indica que o prximo caractere especial e no 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 so geralmente tratados especialmente, indica que o prximo caractere no especial e deve ser interpretado literalmente.

Por exemplo, "*" um caractere especial que significa 0 ou mais ocorrncias 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*".

Conjuntos de Caracteres
Caractere Significado
[xyz]

Um conjunto de caracteres. Corresponde qualquer um dos caracteres cercados. Voc pode especificar uma extenso de caracteres usando um hfen.

Por exemplo, [abcd] o mesmo que [a-d]. Eles correspondem o "b" em "banco" e o "c" em "cortar".

[^xyz]

Um conjunto de caracteres negativo ou complementado. Isto , corresponde qualquer coisa que no esteja cercada nos colchetes. Voc pode especificar uma extenso de caracteres usando um hfen.

Por exemplo, [^abc] o mesmo que [^a-c]. Eles inicialmente correspondem "n" em "banco" e "o" em "cortar".

Limites
Caractere Significado
^

Corresponde o incio de uma entrada. Se a flag multilinha utilizada, tambm corresponde imediatamente aps um caractere de quebra de linha.

Por exemplo, /^A/ no corresponde o "A" em "an A", mas corresponde o primeiro "A" em "An A".

$

Corresponde o fim de uma entrada. Se a flag multilinha utilizada, tambm corresponde imediatamente antes de um caractere de quebra de linha.

Por exemplo, /o$/ no corresponde o "o" em "cantor", mas corresponde em "canto".

\b

Corresponde um limite de palavra de largura zero, como entre uma letra e um espao. (No confundir com [\b])

Por exemplo, /\bno/ corresponde o "no" em "de noite"; /ly\b/ corresponde o "ly" em "possibly yesterday".

\B

Corresponde um limite de uma no palavra de largura zero, como entre duas letras ou entre dois espaos.

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

Agrupamentos e back references
Caractere Significado
(x)

Corresponde x e memoriza a correspondncia. Esses so chamados parnteses 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 tm uma falta na performance. Se voc no necessita que a substring correspondida seja chamada novamente, prefira parnteses de no-captura (veja mais abaixo).

\n

Onde n um inteiro positivo. A back reference to o last substring matching o n parenthetical no expresso regular (counting left parentheses).

Por exemplo, /apple(,)\sorange\1/ corresponde "apple, orange," em "apple, orange, cherry, peach". Um exemplo mais completo est a seguir nesta tabela.

(?:x) Corresponde x mas no memoriza a correspondncia. Esses so chamados parnteses de no-captura. A substring correspondida no 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 assustoooou" e "assust" em "No me assustei", mas nada em "Um bode grunhiu".

Note que no caso acima, o nico caractere a ser selecionado "o", pois ele o caractere imediatamente anterior ao asterisco e no h qualquer operador de agrupamento que indique que mais caracteres deveriam ser submetidos repetio. Se quisssemos selecionar a ocorrncia sequencial da palavra completa "blah", por exemplo, poderamos utilizar algum agrupamento como /(blah)*/ o que geraria a seleo de "blahblahblah" na frase "blahblahblah rao para gatos" ou de "blah" na frase "algoritmo blahut-arimoto".

x+

Corresponde o item precedente x uma ou mais vezes. Equivalente a {1,}.

Por exemplo, /a+/ corresponde o "o" em "doce" e todos os "o"s 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."

If used imediatamente after qualquer dos quantifiers *, +, ?, ou {}, makes o quantifier non-greedy (matching o minimum number of vezes), como opposed to o default, which greedy (matching o maximum number of vezes).

Also used em lookahead assertions, described under (?=), (?!), e (?:) em this table.

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". Porm, nem "Sprat" nem "Frost" so partes do resultado da correspondncia.
x(?!y)

Corresponde x apenas se x no seguido por y. Por exemplo, /\d+(?!\.)/ corresponde um nmero apenas se no for seguido por um ponto.

/\d+(?!\.)/.exec('3.141') corresponde "141", mas no "3.141".

x|y

Corresponde x ou y.

Por exemplo, /verde|vermelha/ corresponde "verde" em "ma verde" e "vermelha" em "ma vermelha".

Entretanto, a primeira expresso tem preferncia. Se uma string fosse corresponder s duas expresses, ela vai corresponder que aparece do lado esquerdo do operador |. Por exemplo, /mas|ma/ corresponde "mas" na frase "mas vermelhas" e "ma" na frase "ma verde".

x{n}

Onde n um nmero inteiro positivo. Corresponde exatamente n ocorrncias do item precedente x.

Por exemplo, /o{2}/ no corresponde o "o" em "brigadeiro", mas corresponde todos os dois "o"s em "brigadeiroo", e o dois primeiros "o"s em "brigadeirooo".

x{n,}

Onde n um nmero inteiro positivo. Corresponde pelo menos n ocorrncias do item precedente x (sem que haja um limite superior).

Por exemplo, /o{2,}/ no corresponde o "o" em "brigadeiro", mas corresponde todos os "o"s em "brigadeiroo" e em "brigadeirooooooooo".

x{n,m}

Onde n e m so nmeros inteiros positivos. Corresponde pelo menos n e no mximo m ocorrncias do item precedente x.

Por exemplo, /o{2,4}/ corresponde nada em "brigadeiro", os dois "o"s em "brigadeiroo", os trs "o"s em "brigadeirooo", e os primeiros quatro "o"s em "brigadeirooooo".

importante perceber que no ltimo caso a correspondncia no inclui o ltimo "o" de "brigadeirooooo". Isso se deve ao fato do operador quantificador ter definido o nmero mximo de ocorrncias como 4, ignorando a quinta repetio do caractere.

x*?
x+?
x??
x{n,}?
x{n,m}?

Operadores non-greedy ou lazy (no-gulosos ou preguiosos)
Esses operadores com a ? no final, operam de maneira semelhante aos seus anlogos sem ? mostrados acima, correspondendo mltiplas ocorrncias do item precedente x. Entretanto, desta vez a ocorrncia selecionada ser a mnima possvel.

No exemplo /(blah)*?/, diante da frase "blahblahblah rao para gatos", nada seria selecionado, pois a ocorrncia mnima aceita pelo operador *? seria ocorrncia de 0 (zero) vezes da string "blah", o que resulta no nada.

J a expresso regular /(blah)+?/, diante da mesma frase, corresponderia a "blah", que a ocorrncia mnima aceita pelo operador +?, ou seja, 1 (uma) repetio da sequncia "blah".

Em outro exemplo com mais aplicao prtica, digamos que se quer corresponder todos os termos que ficam entre aspas em um texto. Se fizssemos simplesmente a regex /".*"/, diante de um texto com mltiplas ocorrncias de termos entre aspas, como: 'Eu "gosto" muito de "estudar" regex', a nossa expresso regular seria gulosa e selecionaria o maior texto possvel que correspondesse definio, nesse caso, selecionando '"gosto" muito de "estudar"', pois todo esse texto est compreendido entre a primeira aspa (antes de 'gosto') e a ltima aspa (aps 'estudar'), o que um resultado talvez indesejado.
Se usarmos a regex /".*?"/, com o operador no-guloso, as correspondncias para a mesma frase seriam '"gosto"' e '"estudar"' separadamente, conforme era a inteno inicial.

Propriedades

RegExp

Permite a adio de propriedades a todos os objetos.

RegExp.length

O valor of RegExp.length 2.

Mtodos

O objeto global RegExp no possui mtodos prprios, no entanto, herda alguns mtodos atravs da cadeia de prototype.

Objetos e instancias

Propriedades

Mtodos

Exemplos

Exemplo: Usando uma expresso regular para mudar o fomato dos dados

O seguinte script usa o mtodo replace() da instncia de String para casar o nome no format nome sobrenome e produzir no formato sobrenome, nome. No texto substituto, o script usa $1 e $2 para indicar os respectivos parnteses de casamento no padro da expresso regular.

js
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);

Isto retornar "Smith, John".

Exemplo: Usando expresses regulares para quebrar linhas com diferentes fins de linha/quebras de linha

O final de linha padro depende da plataforma utilizada (Unix, Windows, etc.). A diviso(split) de linha fornecida neste exemplo funciona com todas as plataformas.

js
var text = "Um texto\nE mais um pouco\r\nE ainda mais\rEsse  o fim";
var lines = text.split(/\r\n|\r|\n/);
console.log(lines); // prints [ 'Um texto', 'E mais um pouco', 'E ainda mais', 'Esse  o fim' ]

Note que a ordem dos padres na expresso regular importa.

Exemplo: Usando expresso regular sobre mltiplas linhas

js
var s = "Please yes\nmake my day!";
s.match(/yes.*day/);
// Retorna null
s.match(/yes[^]*day/);
// Retorna'yes\nmake my day'

Exemplo: Using a expresso regular com o "sticky" flag

Este exemplo mostra como utilizar a sticky flag em expresses regulares.

js
var text = "First line\nSecond line";
var regex = /(\S+) line\n?/y;

var match = regex.exec(text);
console.log(match[1]); // prints 'First'
console.log(regex.lastIndex); // prints '11'

var match2 = regex.exec(text);
console.log(match2[1]); // prints 'Second'
console.log(regex.lastIndex); // prints '22'

var match3 = regex.exec(text);
console.log(match3 === null); // prints 'true'

One can test at run-time whether o sticky flag supported, using try { } catch { }. Para this, either an eval() expression ou o RegExp(regex-string, flags-string) syntax must be used (since o /regex/flags notation processed at compile-time, so throws an exception before o catch block encountered). Por exemplo:

js
var supports_sticky;
try {
  RegExp("", "y");
  supports_sticky = true;
} catch (e) {
  supports_sticky = false;
}
console.log(supports_sticky); // prints 'true'

Exemplo: Expresso regular e Unicode caracteres

As mentioned above, \w ou \W only corresponde ASCII based caracteres; por exemplo, "a" to "z", "A" to "Z", "0" to "9" e "_". To match caracteres from other languages such como Cyrillic ou Hebrew, use \uhhhh, onde "hhhh" o caractere's Unicode valor em hexadecimal. This exemplo demonstrates how one can separate out Unicode caracteres from uma palavra.

js
var text = " text   ";
var regex = /[\u0400-\u04FF]+/g;

var match = regex.exec(text);
console.log(match[0]); // prints ''
console.log(regex.lastIndex); // prints '7'

var match2 = regex.exec(text);
console.log(match2[0]); // prints '' [no print 'text']
console.log(regex.lastIndex); // prints '15'

// e assim vai

Here's an external resource para getting o complete Unicode block range para different scripts: Regexp-unicode-block.

Exemplo: Extracting subdomain name from URL

js
var url = "http://xxx.domain.com";
console.log(/[^.]+/.exec(url)[0].substr(7)); // prints 'xxx'

Especificaes

Specification
ECMAScript 2027 LanguageSpecification
# sec-regexp-regular-expression-objects

Compatibilidade com navegadores

Veja tambm


Web Proxy Viewer  |  New URL  |  Original Page