我正在使用以下正则表达式来匹配所有单词:
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
答案 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)
这是我们的简单正则表达式(在工作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...