⊗jsSpREGL 101 of 294 menu

Säännöllisten lausekkeiden ahneuden rajoittaminen JavaScriptissä

Säännölliset lausekkeet ovat oletusarvoisesti ahneita. Tämä tarkoittaa, että ne sieppaavat mahdollisimman paljon merkkejä. Katsotaan tätä esimerkin avulla. Oletetaan, että meillä on tällainen merkkijono:

let str = 'aeeex zzz x kkk';

Oletetaan, että haluamme löytää tästä merkkijonosta osajonon 'aeeex' seuraavan mallin mukaisesti: kirjain 'a', sitten mikä tahansa merkki yksi tai useampi kerta, sitten kirjain 'x'.

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

Odotamme, että muuttujaan tuloksena kirjoitetaan merkkijono '! zzz x kkk'. Kuitenkin, nin ei käy - muuttujaan päätyy merkkijono '! kkk'.

Syynä on, että säännöllisemme etsii kaikki merkit kirjaimesta 'a' kirjaimeen 'x'. Mutta merkkijonossamme on kaksi kirjainta 'x'! Ahneuden takia käy niin, että säännöllinen lauseke etsii viimeiseen x-kirjaimeen saakka, siepaten siten muuta kuin mitä odotimme.

Tietysti usein tällainen käyttäytyminen on juuri sitä mitä tarvitsemme. Mutta tässä tapauksessa haluaisimme peruuttaa ahneuden ja käskeä säännölliselle lausekkeelle, että sen tulisi etsiä ensimmäiseen x-kirjaimeen saakka.

Ahneuden rajoittamiseksi toistooperaattorin jälkeen tulee laittaa kysymysmerkki:

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

Ahneutta voidaan rajoittaa kaikille toistooperaattoreille: sekä *, että ?, ja {} - näin: *?, ?? ja {}?.

Annettu merkkijono:

let str = 'aba accca azzza wwwwa';

Kirjoita säännöllinen lauseke, joka löytää kaikki merkkijonot, joiden reunoilla on kirjaimet 'a', ja korvaa jokainen niistä merkillä '!'. Kirjainten 'a' välissä voi olla mikä tahansa merkki (paitsi 'a').

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää