Regex соответствует всем словам, кроме тех, что указаны в круглых скобках - javascript

Я использую следующее регулярное выражение для соответствия всем словам:

mystr.replace(/([^\W_]+[^\s-]*) */g, function (match, p1, index, title) {...}

Обратите внимание, что слова могут содержать специальные символы, такие как немецкие Umlauts. Как я могу сопоставить все слова, исключая их в круглых скобках?

Если у меня есть следующая строка:

here wäre c'è (don't match this one) match this

Я хотел бы получить следующий вывод:

here
wäre
c'è
match
this

Конечные пространства не имеют большого значения. Есть ли простой способ добиться этого с помощью регулярного выражения в javascript?

EDIT: Я не могу удалить текст в круглых скобках, так как окончательная строка "mystr" также должна содержать этот текст, тогда как операции с строкой будут выполняться с текстом, который соответствует. Окончательная строка, содержащаяся в "mystr", может выглядеть так:

here wäre c'è (don't match this one) match this

Ответы

Ответ 1

Попробуйте следующее:

var str = "here wäre c'è (don't match this one) match this";

str.replace(/\([^\)]*\)/g, '')  // remove text inside parens (& parens)
   .match(/(\S+)/g);            // match remaining text

// ["here", "wäre", "c'è", "match", "this"]

Ответ 2

Томас, воскресив этот вопрос, потому что у него было простое решение, которое не упоминалось и которое не требует замены последующего соответствия (один шаг вместо двух шагов). (Нашел ваш вопрос, проведя некоторое исследование для общего вопроса о как исключить шаблоны в regex.)

Здесь наше простое регулярное выражение (см. его в работе в regex101, глядя на группу в нижней правой панели):

\(.*?\)|([^\W_]+[^\s-]*)

Левая часть чередования соответствует завершению (parenthesized phrases). Мы проигнорируем эти матчи. Правая сторона сопоставляет и захватывает слова в группу 1, и мы знаем, что они правильные слова, потому что они не соответствовали выражению слева.

В этой программе показано, как использовать регулярное выражение (см. совпадения в онлайн-демонстрация):

<script>
var subject = 'here wäre c\'è (don\'t match this one) match this';
var regex = /\(.*?\)|([^\W_]+[^\s-]*)/g;
var group1Caps = [];
var match = regex.exec(subject);

// put Group 1 captures in an array
while (match != null) {
    if( match[1] != null ) group1Caps.push(match[1]);
    match = regex.exec(subject);
}

document.write("<br>*** Matches ***<br>");
if (group1Caps.length > 0) {
   for (key in group1Caps) document.write(group1Caps[key],"<br>");
   }

</script>

Ссылка

Как сопоставить (или заменить) шаблон, за исключением ситуаций s1, s2, s3...