⊗jsSpREESCh 99 of 294 menu

Escapando caracteres especiais em expressões regulares JavaScript

Suponha que queiramos que um caractere especial represente a si mesmo. Para isso, precisamos escapá-lo usando uma barra invertida. Vamos ver alguns exemplos.

Exemplo

No exemplo a seguir, o autor da expressão regular queria que o padrão de busca fosse: letra 'a', depois o sinal de mais '+', depois a letra 'x'. No entanto, o autor do código não escapou o caractere '+' e, portanto, o padrão de busca na verdade é: letra 'a' uma ou mais vezes, depois a letra 'x':

let str = 'a+x ax aax aaax'; let res = str.replace(/a+x/g, '!');

Como resultado, a variável armazenará o seguinte:

'a+x ! ! !'

Exemplo

Agora, o autor escapou o sinal de mais com uma barra invertida. Assim, o padrão de busca fica correto: letra 'a', depois o sinal de mais '+', depois a letra 'x'.

let str = 'a+x ax aax aaax'; let res = str.replace(/a\+x/g, '!');

Como resultado, a variável armazenará o seguinte:

'! ax aax aaax'

Exemplo

Neste exemplo, o padrão é: letra 'a', depois o ponto '.', depois a letra 'x':

let str = 'a.x abx azx'; let res = str.replace(/a\.x/g, '!');

Como resultado, a variável armazenará o seguinte:

'! abx azx'

Exemplo

No exemplo a seguir, o autor esqueceu de escapar o ponto e a expressão regular capturou todas as substrings, pois um ponto não escapado representa qualquer caractere:

let str = 'a.x abx azx'; let res = str.replace(/a.x/g, '!');

Como resultado, a variável armazenará o seguinte:

'! ! !'

Observação

Preste atenção que se você esquecer a barra invertida para o ponto (quando ele deveria representar a si mesmo) - isso pode passar despercebido:

'a.x'.replace(/a.x/g, '!'); // retorna '!', como queríamos

Visualmente funciona corretamente (já que o ponto representa qualquer caractere, inclusive um ponto literal '.'). Mas se alterarmos a string onde as substituições ocorrem - veremos nosso erro:

'a.x abx azx'.replace(/a.x/g, '!'); // retorna '! ! !', mas esperávamos '! abx azx'

Lista de caracteres especiais e comuns

Se você escapar um caractere comum - nada de ruim acontecerá - ele ainda representará a si mesmo. A exceção são os dígitos, que não podem ser escapados.

Muitas vezes surge a dúvida se um determinado caractere é especial. Alguns chegam ao ponto de escapar todos os caracteres suspeitos de uma vez. No entanto, isso é uma má prática (polui a expressão regular com barras invertidas).

São caracteres especiais: $ ^ . * + ? \ / {} [] () |

Não são caracteres especiais: @ : , ' " ; - _ = < > % # ~ `& !

Problemas práticos

Dada a string:

let str = 'a.a aba aea';

Escreva uma expressão regular que encontre a string 'a.a', sem capturar as demais.

Dada a string:

let str = '2+3 223 2223';

Escreva uma expressão regular que encontre a string '2+3', sem capturar as demais.

Dada a string:

let str = '23 2+3 2++3 2+++3 345 567';

Escreva uma expressão regular que encontre as strings '2+3', '2++3', '2+++3', sem capturar as demais (+ pode aparecer qualquer quantidade de vezes).

Dada a string:

let str = '23 2+3 2++3 2+++3 445 677';

Escreva uma expressão regular que encontre as strings '23', '2+3', '2++3', '2+++3', sem capturar as demais.

Dada a string:

let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';

Escreva uma expressão regular que encontre as strings '*q+', '*qq+', '*qqq+', sem capturar as demais.

Dada a string:

let str = '[abc] {abc} abc (abc) [abc]';

Escreva uma expressão regular que encontre as strings entre colchetes e as substitua por '!'.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar