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:

javascriptlet str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);

Tuloksena tallennuspaikoissamme on seuraavaa:

javascriptconsole.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:

javascriptlet str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);

Tuloksena ensimmäisessä tallennuspaikassa on numeromme:

javascriptconsole.log(res[1]); // tulostaa '123'