⊗jsSpRELAB 133 of 294 menu

Positiivinen ja negatiivinen etsintä JavaScriptin säännöllisissä lausekkeissa

Joskus on ratkaistava seuraavanlainen ongelma: etsi merkkijono 'aaa' ja korvaa se merkkijonolla '!', mutta vain jos 'aaa':n jälkeen on 'x', mutta itse 'x':ää ei tule korvata. Jos yritämme ratkaista ongelman 'suoraan', se ei onnistu:

'aaax baaa'.replace(/aaax/g, '!'); // palauttaa '! baaa', haluttiin '!x baaa'

Etsintä eteenpäin

Ongelman ratkaisemiseksi tarvitaan tapa sanoa, että 'x':ää ei tulisi korvata. Tämä tehdään erikoisilla sulkeilla (?= ), jotka vain etsivät, mutta eivät ota itseään mukaan.

Näitä sulkeita kutsutaan positiiviseksi etsinnäksi eteenpäin. Positiivinen - koska 'x' (meidän tapauksessamme) on oltava - vain silloin korvaus tapahtuu.

Sovelletaan näitä sulkeita ongelmamme ratkaisemiseksi:

'aaax aaab'.replace(/aaa(?=x)/g, '!'); // palauttaa '!x aaab'

On olemassa myös negatiivinen etsintä eteenpäin - (?! ) - se puolestaan sanoo, että jotain ei pitäisi olla. Seuraavassa esimerkissä korvaus tapahtuu vain, jos 'aaa':n jälkeen ei ole 'x':

'aaax aaab'.replace(/aaa(?!x)/g, '!'); // palauttaa 'aaax !b'

Etsintä taaksepäin

Vastaavasti on olemassa positiivinen etsintä taaksepäin - (?<= ). Seuraavassa esimerkissä korvaus tapahtuu vain, jos 'aaa':n edessä on 'x':

'xaaa'.replace(/(?<=x)aaa/g, '!'); // palauttaa 'x!'

Ja on myös negatiivinen etsintä taaksepäin - (?<! ). Seuraavassa esimerkissä korvaus tapahtuu vain, jos 'aaa':n edessä ei ole 'x':

'baaa'.replace(/(?<!x)aaa/g, '!'); // palauttaa 'b!'

Käytännön tehtävät

Annettu merkkijono, joka sisältää funktion nimiä:

let str = 'func1() func2() func3()';

Hanki taulukko funktioiden nimistä merkkijonosta.

Annettu merkkijono tagilla:

let str = '<a href="" class="eee" id="zzz">';

Hanki taulukko tämän tagin attribuuttien nimistä.

Annettu merkkijono muuttujilla:

let str = '$aaa $bbb $ccc xxxx';

Hanki merkkijonot, joiden edessä on dollarimerkki.

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ää