Ваше регулярное выражение использует отрицательный прогноз (?!.+\)
, чтобы утверждать, что справа не закрывающая скобка.Это имеет совпадения с последнего вхождения закрывающей скобки, потому что после этого больше нет )
.Затем вы соответствуете 1+ словам символов, которые будут соответствовать you
.
Вместо использования отрицательного взгляда, вы можете использовать группу захвата:
\([^)]+\)\s*(\w+)
Regex demo
const regex = /\([^)]+\)\s*(\w+)/g;
const str = `( hello ) ehsan (how are) you`;
let m;
while ((m = regex.exec(str)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
console.log(m[1]);
}
Если двигатель поддерживает lookbehind с принимает квантификаторы бесконечной длины, вы также можете использовать положительный lookbehind:
(?<=\([^()]+\)) (\w+)
const regex = /(?<=\([^()]+\))\s*(\w+)/g;
const str = `( hello ) ehsan (how are) you`;
while ((m = regex.exec(str)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
console.log(m[1]);
}