假设我已获得以下内容以对抗:
将'hello world'插入{This is a test}
我希望在空格上匹配并将每个匹配推送到我的字符串数组,因为我需要知道字符串中文本的索引。
这是棘手的部分;必须排除单引号(')和大括号({})内的空格
我想要的结果是:
到目前为止,我已经能够排除单引号内的空格,但是我无法弄清楚如何将它与大括号结合起来。
截至目前我的正则表达方式:
\ S(=(?:?[^ '] |'[^ '] ') $)
答案 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
答案 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...