Ei-tallentavat sulkeet JavaScriptin säännöllisissä lausekkeissa
Sulkeet ( ) suorittavat kaksi tehtävää -
merkkien ryhmittely ja tallennuspaikan funktio. Mutta
mitä tehdä, jos haluamme ryhmitellä,
mutta emme tallentaa tallennuspaikkaan?
Tämän ongelman ratkaisemiseksi on kehitetty erityiset
ei-tallentavat sulkeet (?: )
- ne ryhmittelevät, mutta eivät tallenna tallennuspaikkaan.
Esimerkki
Seuraavassa esimerkissä tarvitsemme ensimmäisiä sulkeita ryhmittelyyn ja toisia - tallennuspaikkaan. Kuitenkin molemmat sulkeet tallentavat tiedot tallennuspaikkaan:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Tuloksena tallennuspaikoissamme on seuraavaa:
console.log(res[0]); // tulostaa 'abab123'
console.log(res[1]); // tulostaa 'ab'
console.log(res[2]); // tulostaa '123'
Esimerkki
Tehdään niin, että ensimmäinen sulkipari vain ryhmittelee, mutta ei tallenna tallennuspaikkaan:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Tuloksena ensimmäisessä tallennuspaikassa on numeromme:
console.log(res[1]); // tulostaa '123'