JavaScript ретіндегі позитивті және негативті іздеу

Кейде мынадай есепті шешу керек болады: 'aaa' жолын тауып, оны '!'-ге ауыстыру, бірақ тек егер 'aaa'-ден кейін 'x' тұрса, ал 'x'-тің өзін ауыстырмау керек. Егер біз есепті 'бас бармақ ережесімен' шешуге тырыссак, онда ештеңе шықпайды:

javascript'aaax baaa'.replace(/aaax/g, '!'); // '! baaa' қайтарады, біз '!x baaa' деп қаладық

Алға іздеу

Есепті шешу үшін 'x'-ті ауыстыруға болмайды деп айтудың тәсілі керек. Бұл (?= ) арнайы жақшалары арқылы жасалады, олар тек қарап қана қойып, өздерімен бірге алмайды.

Бұл жақшалар алға қарай позитивті іздеу деп аталады. Позитивті - себебі 'x' (біздің жағдайда) болуы керек - сонда ғана ауыстыру орын алады.

Енді біздің есепті шешу үшін осы жақшаларды қолданайық:

javascript'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab' қайтарады

Алға қарай негативті іздеу те бар - (?! ) - ол, керісінше, бір нәрсенің болмауы керек екенін білдіреді. Келесі мысалда ауыстыру тек егер 'aaa'-ден кейін 'x' ЕМЕС тұрғанда ғана орын алады:

javascript'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b' қайтарады

Артқа іздеу

Сол сияқты артқа қарай позитивті іздеу бар - (?<= ). Келесі мысалда ауыстыру тек егер 'aaa'-ден бұрын 'x' тұрғанда ғана орын алады:

javascript'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!' қайтарады

Сондай-ақ артқа қарай негативті іздеу те бар - (?<! ). Келесі мысалда ауыстыру тек егер 'aaa'-ден бұрын 'x' тұрмағанда ғана орын алады:

javascript'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!' қайтарады

Практикалық есептер

Задание 1

Функция атауларын қамтитын жол берілген:

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

Жолдан функция атауларының массивін алыңыз.

Задание 2

Тегі бар жол берілген:

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

Осы тегтің атрибут атауларының массивін алыңыз.

Задание 3

Айнымалылар бар жол берілген:

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

Алдында доллар белгісі тұрған ішкі жолдарды алыңыз.