⊗jsSpRELAB 133 of 294 menu

Դրական և բացասական դիտում 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';

Ստացեք ենթատողերը, որոնցից առաջ կա դոլարի նշան.

enhydasvro