⊗jsSpRELAB 133 of 294 menu

Verificarea pozitivă și negativă în expresiile regulate JavaScript

Uneori trebuie să rezolvi o problemă de acest tip: găsește șirul 'aaa' și înlocuiește-l cu '!', dar numai dacă după 'aaa' urmează 'x', iar 'x' în sine să nu fie înlocuit. Dacă încercăm să rezolvăm problema "direct", nu vom reuși:

'aaax baaa'.replace(/aaax/g, '!'); // returnează '! baaa', dar am vrut '!x baaa'

Verificare înainte

Pentru a rezolva problema, este nevoie de o modalitate de a spune că 'x' nu trebuie înlocuit. Acest lucru se face cu ajutorul unor paranteze speciale (?= ), care doar verifică, dar nu consumă caractere.

Aceste paranteze se numesc verificare pozitivă înainte. Pozitivă - deoarece 'x' (în cazul nostru) trebuie să fie prezent - doar atunci va avea loc înlocuirea.

Să aplicăm aceste paranteze pentru a ne rezolva problema:

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

Există și verificare negativă înainte - (?! ) - acesta, dimpotrivă, spune că ceva nu trebuie să fie prezent. În următorul exemplu, înlocuirea va avea loc doar dacă după 'aaa' NU urmează 'x':

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

Verificare înapoi

În mod analog, există verificare pozitivă înapoi - (?<= ). În următorul exemplu înlocuirea va avea loc doar dacă înaintea 'aaa' se află 'x':

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

Și există de asemenea verificare negativă înapoi - (?<! ). În următorul exemplu înlocuirea va avea loc doar dacă înaintea 'aaa' nu se află 'x':

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

Probleme practice

Este dat un șir care conține nume de funcții:

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

Obțineți un array cu numele funcțiilor din șir.

Este dat un șir cu un tag:

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

Obțineți un array cu numele atributelor acestui tag.

Este dat un șir cu variabile:

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

Obțineți subșirurile înaintea cărora se află simbolul dolar.

ptsvhyazid