Positiewe en Negatiewe Voorskou in JavaScript Reguliêre Uitdrukkings

Soms moet jy 'n probleem van hierdie tipe oplos: vind die string 'aaa' en vervang dit met '!', maar slegs as na 'aaa' 'x' staan, en die 'x' self moenie vervang word nie. As ons die probleem probeer oplos 'direk', sal ons nie slaag nie:

javascript'aaax baaa'.replace(/aaax/g, '!'); // gee terug '! baaa', maar ons wou '!x baaa' hê

Voorskou Vorentoe

Om die probleem op te los, is 'n manier nodig om te sê dat 'x' nie vervang moet word nie. Dit word gedoen met behulp van spesiale hakies (?= ), wat net kyk, maar nie self saamneem nie.

Hierdie hakies word positiewe voorskou vorentoe genoem. Positief - omdat 'x' (in ons geval) moet wees - slegs dan sal vervanging plaasvind.

Kom ons pas hierdie hakies toe om ons probleem op te los:

javascript'aaax aaab'.replace(/aaa(?=x)/g, '!'); // gee terug '!x aaab'

Daar is ook negatiewe voorskou vorentoe - (?! ) - dit sê, andersom, dat daar nie iets moet wees nie. In die volgende voorbeeld sal vervanging slegs plaasvind as daar NIE 'n 'x' na 'aaa' is nie:

javascript'aaax aaab'.replace(/aaa(?!x)/g, '!'); // gee terug 'aaax !b'

Voorskou Agtertoe

Op 'n soortgelyke manier is daar positiewe voorskou agtertoe - (?<= ). In die volgende voorbeeld sal vervanging slegs plaasvind as daar 'n 'x' voor 'aaa' is:

javascript'xaaa'.replace(/(?<=x)aaa/g, '!'); // gee terug 'x!'

En daar is ook negatiewe voorskou agtertoe - (?<! ). In die volgende voorbeeld sal vervanging slegs plaasvind as daar NIE 'n 'x' voor 'aaa' is nie:

javascript'baaa'.replace(/(?<!x)aaa/g, '!'); // gee terug 'b!'

Praktiese Take

Задание 1

Daar is 'n string wat funksiename bevat:

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

Kry 'n array van funksiename uit die string.

Задание 2

Daar is 'n string met 'n tag:

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

Kry 'n array van eienskapsname vir hierdie tag.

Задание 3

Daar is 'n string met veranderlikes:

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

Kry die substringe waar voor die dollar-teken staan.