⊗jsSpREGL 101 of 294 menu

Ограничаване на алчността в регулярните изрази в JavaScript

Регулярните изрази по подразбиране са алчни. Това означава, че те захващат максималното възможно количество символи. Нека разгледаме с пример. Да предположим, че имаме следния низ:

let str = 'aeeex zzz x kkk';

Да предположим, че в този низ искаме да намерим подниза 'aeeex' по следния шаблон: буква 'a', след което произволен символ един или повече пъти, след това буква 'x'.

let res = str.replace(/a.+x/g, '!');

Очакваме, че в резултат в променливата ще бъде записан низът '! zzz x kkk'. Обаче, това не е така - в променливата попада низът '! kkk'.

Цялата работа е там, че нашето регулярно изражение търси всички символи от буквата 'a' до буквата 'x'. Но в нашия низ има две букви 'x'! Поради алчността се оказва, че регулярното изражение търси до последната буква 'x', като по този начин захваща не това, което очаквахме.

Разбира се, често това поведение е точно това, от което се нуждаем. Но конкретно в този случай бихме искали да деактивираме алчността и да кажем на регулярното изражение да търси до първата буква 'x'.

За да ограничим алчността, трябва след оператора за повторение да поставим въпросителен знак:

let res = str.replace(/a.+?x/g, '!');

Алчността може да бъде ограничена за всички оператори за повторение: както *, така и ?, и {} - ето така: *?, ?? и {}?.

Даден е низ:

let str = 'aba accca azzza wwwwa';

Напишете регулярно изражение, което ще намери всички низове, по чиито краища стоят букви 'a', и ще замени всеки от тях с '!'. Между буквите 'a' може да има произволен символ (освен 'a').

Български
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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне