空格上的正则表达式匹配 - 排除多组字符之间的空格

时间:2013-11-14 12:03:18

标签: javascript regex

假设我已获得以下内容以对抗:

  

将'hello world'插入{This is a test}

我希望在空格上匹配并将每个匹配推送到我的字符串数组,因为我需要知道字符串中文本的索引。

这是棘手的部分;必须排除单引号(')和大括号({})内的空格

我想要的结果是:

  1. 插入
  2. 'hello world'
  3. {这是测试}
  4. 到目前为止,我已经能够排除单引号内的空格,但是我无法弄清楚如何将它与大括号结合起来。

    截至目前我的正则表达方式:

      

    \ S(=(?:?[^ '] |'[^ '] ') $)

2 个答案:

答案 0 :(得分:2)

这个非常棘手。我想过匹配而不是这次分裂:

'[^']*'|\{[^\}]*\}|\S+

让我们解释一下:

'[^']*'     # match a quoted string
|           # or
\{[^\}]*\}  # match zero or more characters between curly brackets
|           # or
\S+         # match a non-white space character one or more times

Online demo

答案 1 :(得分:1)

Niekert,复活这个问题,因为它有一个简单的解决方案,没有提到。这种情况听起来与Match (or replace) a pattern except in situations s1, s2, s3 etc非常相似。

这是我们简单的正则表达式:

{[^}]+}|( )

交替的左侧匹配完整的{ ... }大括号。我们将忽略这些匹配。右侧匹配并捕获第1组的空格,我们知道它们是正确的空格,因为它们与左侧的表达式不匹配。

此程序显示了如何使用正则表达式(请参阅online demo窗格中的结果):

<script>
var subject = "insert 'hello world' into {This is a test}";
var regex = /{[^}]+}|( )/g;
var match = regex.exec(subject);
replaced = subject.replace(regex, function(m, group1) {
    if (group1 == "" ) return m;
    else return "SplitHere";
});
splits = replaced.split("SplitHere");
document.write("*** Splits ***<br>");
for (key in splits) document.write(splits[key],"<br>");
</script>

参考

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