⊗jsSpRELAB 133 of 294 menu

პოზიტიური და ნეგატიური ნახვა ჯავასკრიპტის რეგულარულ გამონათქვამებში

ზოგჯერ საჭიროა ამ类型的 ამოცანის ამოხსნა: მოძებნოთ სტრიქონი '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';

მიიღეთ ქვესტრიქონები, რომლების წინაც დგას დოლარის სიმბოლო.

ქართული
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語Қазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა