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