⊗jsSpRELAB 133 of 294 menu

Lookahead e Lookbehind positivo e negativo nelle espressioni regolari JavaScript

A volte è necessario risolvere un problema di questo tipo: trovare la stringa 'aaa' e sostituirla con '!', ma solo se dopo 'aaa' c'è 'x', e 'x' stesso non deve essere sostituito. Se proviamo a risolvere il problema 'frontalmente', non avremo successo:

'aaax baaa'.replace(/aaax/g, '!'); // restituirà '! baaa', ma volevamo '!x baaa'

Lookahead

Per risolvere il problema, serve un modo per dire che 'x' non deve essere sostituito. Questo si fa tramite parentesi speciali (?= ), che controllano semplicemente, ma non consumano i caratteri.

Queste parentesi sono chiamate lookahead positivo. Positivo perché 'x' (nel nostro caso) deve esserci - solo allora avverrà la sostituzione.

Applichiamo queste parentesi per risolvere il nostro problema:

'aaax aaab'.replace(/aaa(?=x)/g, '!'); // restituirà '!x aaab'

Esiste anche il lookahead negativo - (?! ) - che, al contrario, dice che qualcosa non deve esserci. Nel prossimo esempio, la sostituzione avverrà solo se dopo 'aaa' non c'è 'x':

'aaax aaab'.replace(/aaa(?!x)/g, '!'); // restituirà 'aaax !b'

Lookbehind

Allo stesso modo, esiste il lookbehind positivo - (?<= ). Nel prossimo esempio la sostituzione avverrà solo se prima di 'aaa' c'è 'x':

'xaaa'.replace(/(?<=x)aaa/g, '!'); // restituirà 'x!'

Ed esiste anche il lookbehind negativo - (?<! ). Nel prossimo esempio la sostituzione avverrà solo se prima di 'aaa' non c'è 'x':

'baaa'.replace(/(?<!x)aaa/g, '!'); // restituirà 'b!'

Problemi pratici

Data una stringa contenente nomi di funzioni:

let str = 'func1() func2() func3()';

Ottieni un array dei nomi delle funzioni dalla stringa.

Data una stringa con un tag:

let str = '<a href="" class="eee" id="zzz">';

Ottieni un array dei nomi degli attributi di questo tag.

Data una stringa con variabili:

let str = '$aaa $bbb $ccc xxxx';

Ottieni le sottostringhe che sono precedute dal simbolo del dollaro.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta