Դրական և բացասական դիտում 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';
Ստացեք ենթատողերը, որոնցից առաջ կա դոլարի նշան.