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

Regex match on whitespace - Exclude whitespaces between multiple sets of characters

本文关键字:空格 字符 之间 排除 正则表达式      更新时间:2023-09-26

>假设我得到了以下匹配:

在{这是一个测试}中插入"hello world"

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

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

我想要的结果是:

  1. 插入
  2. "你好世界"
  3. {这是一个测试}

到目前为止,我已经能够排除单引号内的空格,但是我不知道如何将其与大括号组合在一起。

到目前为止,我的正则表达式:

''s(?=(?:[^']|'[^']')$)

这个很棘手。这次我想过匹配而不是拆分:

'[^']*'|'{[^'}]*'}|'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

在线演示

Niekert,复活这个问题,因为它有一个简单的解决方案,没有提到。这种情况听起来与匹配(或替换)模式非常相似,除了在 s1、s2、s3 等情况下。

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

{[^}]+}|( )

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

该程序显示了如何使用正则表达式(请参阅在线演示窗格中的结果):

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

参考

如何匹配(或替换)模式,除非在 s1、s2、s3 的情况下...