JavaScript ретіндегі позитивті және негативті іздеу
Кейде мынадай есепті шешу керек болады:
'aaa' жолын тауып, оны '!'-ге
ауыстыру,
бірақ тек егер 'aaa'-ден кейін
'x' тұрса, ал 'x'-тің өзін
ауыстырмау керек. Егер біз есепті
'бас бармақ ережесімен' шешуге
тырыссак, онда ештеңе шықпайды:
'aaax baaa'.replace(/aaax/g, '!'); // '! baaa' қайтарады, біз '!x baaa' деп қаладық
Алға іздеу
Есепті шешу үшін 'x'-ті ауыстыруға
болмайды деп айтудың тәсілі керек. Бұл
(?= ) арнайы жақшалары арқылы
жасалады, олар тек қарап қана қойып,
өздерімен бірге алмайды.
Бұл жақшалар алға қарай позитивті іздеу
деп аталады. Позитивті - себебі 'x'
(біздің жағдайда) болуы керек - сонда ғана
ауыстыру орын алады.
Енді біздің есепті шешу үшін осы жақшаларды қолданайық:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab' қайтарады
Алға қарай негативті іздеу те бар
- (?! ) - ол, керісінше, бір нәрсенің
болмауы керек екенін білдіреді. Келесі мысалда
ауыстыру тек егер 'aaa'-ден кейін
'x' ЕМЕС тұрғанда ғана орын алады:
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b' қайтарады
Артқа іздеу
Сол сияқты артқа қарай позитивті іздеу
бар - (?<= ). Келесі мысалда ауыстыру
тек егер 'aaa'-ден бұрын 'x'
тұрғанда ғана орын алады:
'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!' қайтарады
Сондай-ақ артқа қарай негативті іздеу те
бар - (?<! ). Келесі мысалда ауыстыру
тек егер 'aaa'-ден бұрын 'x'
тұрмағанда ғана орын алады:
'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!' қайтарады
Практикалық есептер
Функция атауларын қамтитын жол берілген:
let str = 'func1() func2() func3()';
Жолдан функция атауларының массивін алыңыз.
Тегі бар жол берілген:
let str = '<a href="" class="eee" id="zzz">';
Осы тегтің атрибут атауларының массивін алыңыз.
Айнымалылар бар жол берілген:
let str = '$aaa $bbb $ccc xxxx';
Алдында доллар белгісі тұрған ішкі жолдарды алыңыз.