Во-первых, не будьте жадными.
/\(.*?(this).*?\)/g
Во-вторых, если вы хотите подсчитать количество вхождений 'this', регулярное выражение, вероятно, неправильный инструмент здесь.Проблема в том, что вам нужно сопоставить закрывающий разделитель, чтобы определить, что заключено первое «this», что означает, что продолжение применения регулярного выражения не будет совпадать с чем-либо внутри уже использованного набора разделителей.
Регулярное выражение, приведенное выше, будет ловить такие вещи, как:
foo (baz this bar) (foo this)
Но нет (оно будет совпадать только дважды, один раз для каждого набора разделителей):
foo (this this bar) baz (this this this)
Попробуйте использовать простой однопроходный сканер вместо регулярных выражений.Другой альтернативой является использование двух регулярных выражений: одно для разделения строки на вложенные и незакрытые разделы, а другое для поиска в закрытых областях.