--- title: RegExp slug: Web/JavaScript/Reference/Global_Objects/RegExp tags: - Construtor - Expressões Regulares - JavaScript - Referencia - RegExp translation_of: Web/JavaScript/Reference/Global_Objects/RegExp ---
O construtor RegExp
cria um objeto de expressão regular para realizar uma correspondência de texto com um padrão.
Para uma introdução à expressões regulares, leia o capítulo de Expressões Regulares no Guia de JavaScript.
Notações literais e de construtores são possíveis:
/padrão/flags
new RegExp(padrão[, flags])
RegExp(padrão[, flags])
padrão
flags
Se especificado, flagsindica os marcadores que podem ser adicionados, ou se um objeto é suficiente para o padrão, os valores de flags serão substituidos por qualquer uma das flags de objetos. O valor de flagsé uma string contendo qualquer combinação dos seguintes valores:
g
i
m
u
{{experimental_inline}}y
{{experimental_inline}}lastIndex
dessa expressão regular na string alvo (e não tenta corresponder de qualquer indexes posteriores).Há dois modos de criar um objeto RegExp
: uma notação literal e um construtor. Para indicar strings, os parâmetros para a notação literal não usam aspas, enquanto os parâmetros para a função do construtor usam. Então, as seguintes expressões criam a mesma expressão regular:
/ab+c/i; new RegExp('ab+c', 'i');
A notação literal compila a expressão regular em tempo de execução. Use a notação literal quando a expressão regular permanecerá constante. Por exemplo, se você usar a notação literal para construir a expressão regular usada em um loop, a expressão regular não será recompilada a cada iteração
O construtor do objeto da expressão regular, por exemplo, new RegExp('ab+c')
, fornece uma compilação em tempo de execução da expressão regular. Use a função construtora quando você sabe que o padrão da expressão regular será mudado, ou você não sabe o padrão e o está recebendo de outra fonte, como uma entrada do usuário.
Começando com ECMAScript 6, new RegExp(/ab+c/, 'i')
, deixou de lançar um {{jsxref("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 invés disso.
Quando se usa a função construtora, as regras de escapar em uma string (preceder caracteres especiais com \ quando incluídos na string) são necessárias. Por exemplo, as declarações a seguir são equivalentes:
var re = /\w+/; var re = new RegExp('\\w+');
Classes de Caracteres | |
---|---|
Caractere | Significado |
. |
(O ponto) corresponde um único caracter qualquer exceto os caracteres de nova linha: Note que a flag multilinha Por exemplo, |
\d |
Corresponde um caractere de dígito no alfabeto basic Latin. Equivalente Por exemplo, |
\D |
Corresponde qualquer caractere que não é um dígito no alfabeto basic Latin. Equivalente a Por exemplo, |
\w |
Corresponde qualquer caractere alfanumérico do alfabeto basic Latin, incluindo o underline. Equivalente a Por exemplo, |
\W |
Corresponde qualquer caractere que não é um alfanumérico do alfabeto basic Latin. Equivalente a Por exemplo, |
\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 Por exemplo, |
\S |
Corresponde um único caractere que não seja um espaço em branco. Equivalente a Por exemplo, |
\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 caracter backspace. (Não confundir com \b ) |
\0 |
Corresponde um caractere NUL. Não coloque outro dígito seguinte a esse. |
\cX |
Onde Por exemplo, |
\xhh |
Corresponde o caractere com o código 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, 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, |
Conjuntos 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, |
[^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, |
Limites | |
Caractere | Significado |
^ |
Corresponde o início de uma entrada. Se a flag multilinha é utilizada, também corresponde imediatamente após um caractere de quebra de linha. Por exemplo, |
$ |
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, |
\b |
Corresponde um limite de palavra de largura zero, como entre uma letra e um espaço. (Não confundir com Por exemplo, |
\B |
Corresponde um limite de uma não palavra de largura zero, como entre duas letras ou entre dois espaços. Por exemplo, |
Agrupamentos e back references | |
Caractere | Significado |
(x) |
Corresponde Por exemplo, 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 Por exemplo, |
(?: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, Note que no caso acima, o único caractere a ser selecionado é "o", pois ele é o caractere imediatamente anterior ao asterisco e não há qualquer operador de agrupamento que indique que mais caracteres deveriam ser submetidos à repetição. Se quiséssemos selecionar a ocorrência sequencial da palavra completa "blah", por exemplo, poderíamos utilizar algum agrupamento como |
x+ |
Corresponde o item precedente x uma ou mais vezes. Equivalente a Por exemplo, |
x? |
Corresponde o item precedente x nenhuma ou uma vez. Por exemplo, If used imediatamente after qualquer dos quantifiers Also used em lookahead assertions, described under |
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|y |
Corresponde Por exemplo, Entretanto, a primeira expressão tem preferência. Se uma string fosse corresponder às duas expressões, ela vai corresponder à que aparece do lado esquerdo do operador |
x{n} |
Onde Por exemplo, |
x{n,} |
Onde Por exemplo, |
x{n,m} |
Onde Por exemplo, É importante perceber que no último caso a correspondência não inclui o último "o" de "brigadeirooooo". Isso se deve ao fato do operador quantificador ter definido o número máximo de ocorrências como 4, ignorando a quinta repetição do caractere. |
|
Operadores non-greedy ou lazy (não-gulosos ou preguiçosos) No exemplo Já a expressão regular Em outro exemplo com mais aplicação prática, digamos que se quer corresponder todos os termos que ficam entre aspas em um texto. Se fizéssemos simplesmente a regex |
RegExp.length
RegExp.length
é 2.O objeto global RegExp não possui métodos próprios, no entanto, herda alguns métodos através da cadeia de prototype.
O seguinte script usa o método {{jsxref("String.prototype.replace()", "replace()")}} da instância de {{jsxref("Global_Objects/String", "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 parênteses de casamento no padrão da expressão regular.
var re = /(\w+)\s(\w+)/; var str = 'John Smith'; var newstr = str.replace(re, '$2, $1'); console.log(newstr);
Isto retornará "Smith, John".
O final de linha padrão depende da plataforma utilizada (Unix, Windows, etc.). A divisão(split) de linha fornecida neste exemplo funciona com todas as plataformas.
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 padrões na expressão regular importa.
var s = 'Please yes\nmake my day!'; s.match(/yes.*day/); // Retorna null s.match(/yes[^]*day/); // Retorna'yes\nmake my day'
Este exemplo mostra como utilizar a sticky flag em expressões regulares.
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:
var supports_sticky; try { RegExp('', 'y'); supports_sticky = true; } catch(e) { supports_sticky = false; } console.log(supports_sticky); // prints 'true'
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.
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 'на' [não 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.
var url = 'http://xxx.domain.com'; console.log(/[^.]+/.exec(url)[0].substr(7)); // prints 'xxx'
Specification | Status | Comment |
---|---|---|
ECMAScript 1st Edition. | Standard | Initial definition. Implemented em JavaScript 1.1. |
{{SpecName('ES5.1', '#sec-15.10', 'RegExp')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-regexp-regular-expression-objects', 'RegExp')}} | {{Spec2('ES6')}} |
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Sticky flag ("y") | {{CompatChrome("39")}} (behind flag) | {{CompatGeckoDesktop("1.9")}} ES4-Style {{bug(773687)}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Feature | Android | Chrome para Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Sticky flag ("y") | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("1.9")}} ES4-Style {{bug(773687)}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |