正则表达式匹配除括号中的所有单词 - javascript

时间:2012-10-15 11:36:43

标签: javascript regex

我正在使用以下正则表达式来匹配所有单词:

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

请注意,单词可以包含德语元音等特殊字符。 如何匹配除括号内的所有单词?

如果我有以下字符串:

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

我想得到以下输出:

here
wäre
c'è
match
this

尾随空格并不重要。 有没有一种简单的方法可以在javascript中使用正则表达式来实现这一目标?

编辑: 我无法删除括号中的文本,因为最后的字符串“mystr”也应该包含此文本,而字符串操作将在匹配的文本上执行。 “mystr”中包含的最终字符串可能如下所示:

Here Wäre C'è (don't match this one) Match This

2 个答案:

答案 0 :(得分:4)

试试这个:

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"]

答案 1 :(得分:1)

托马斯,恢复这个问题,因为它有一个简单的解决方案,没有提到,并且不需要替换然后匹配(一步而不是两步)。 (在针对how to exclude patterns in regex的一般性问题进行一些研究时找到了您的问题。)

这是我们的简单正则表达式(在工作on regex101看到它,查看右下方面板中的Group捕获):

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

交替的左侧与完成(parenthesized phrases)匹配。我们将忽略这些匹配。右侧匹配并捕获第1组的单词,我们知道它们是正确的单词,因为它们与左侧的表达不匹配。

此程序显示了如何使用正则表达式(请参阅online demo中的匹配项):

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

参考

How to match (or replace) a pattern except in situations s1, s2, s3...