⊗jsSpREGL 101 of 294 menu

Limitando a ganância em expressões regulares no JavaScript

As expressões regulares são, por padrão, gananciosas. Isso significa que elas capturam o número máximo possível de caracteres. Vamos analisar um exemplo. Suponha que temos a seguinte string:

let str = 'aeeex zzz x kkk';

Suponha que nesta string queremos encontrar a substring 'aeeex' usando o seguinte padrão: a letra 'a', seguida por qualquer caractere uma ou mais vezes, seguida pela letra 'x'.

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

Esperamos que o resultado na variável seja a string '! zzz x kkk'. Entretanto, não é isso que acontece - a variável contém a string '! kkk'.

O problema é que nossa regex busca todos os caracteres da letra 'a' até a letra 'x'. Mas na nossa string existem duas letras 'x'! Devido à ganância, a regex busca até o último 'x', capturando assim algo diferente do que esperávamos.

Claro, muitas vezes esse comportamento é o que queremos. Mas, neste caso específico, gostaríamos de cancelar a ganância e dizer à regex para buscar até o primeiro 'x'.

Para limitar a ganância, é necessário colocar um ponto de interrogação após o operador de repetição:

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

A ganância pode ser limitada para todos os operadores de repetição: tanto *, quanto ?, e {} - assim: *?, ?? e {}?.

Dada a string:

let str = 'aba accca azzza wwwwa';

Escreva uma expressão regular que encontre todas as strings delimitadas pelas letras 'a', e substitua cada uma delas por '!'. Entre as letras 'a' pode haver qualquer caractere (exceto 'a').

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