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

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