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';
Алдында доллар белгиси турган ички саптарды алыңыз.