Несохраняющие скобки в регулярках JavaScript
Скобки ( )
выполняют две функции -
группировка символов и функцию кармана. А
что делать, если нам нужно сгруппировать,
но в карман не класть?
Для решения такой проблемы придуманы специальные
несохраняющие скобки (?: )
- они группируют, но не кладут в карман.
Пример
В следующем примере первые скобки нам нужны для группировки, а вторые - для кармана. Однако, и те, и другие скобки сохраняют данные в карман:
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
В результате в наших карманах будет следующее:
console.log(res[0]); // выведет 'abab123'
console.log(res[1]); // выведет 'ab'
console.log(res[2]); // выведет '123'
Пример
Сделаем так, чтобы первая пара скобок только группировала, но не клала в карман:
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
В результате в первом кармане будет наше число:
console.log(res[1]); // выведет '123'