⊗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';

Получете поднизове, пред които има знак за долар.

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