用于拆分字符串的复杂正则表达式 - 第 2 部分



我不久前发布了这个问题,得到了很好的回答:用于拆分字符串的复杂正则表达式

我知道有一个与之相关的新难题,我真的一事无成......

假设我现在有这样的字符串:

{foo.bar:/?a{3}}{blah}

使用上一篇文章中提供的代码,它可以做到这一点:

{foo.bar:/?a
{3}}
{blah}

我希望它这样做:

{foo.bar:/?a{3}}
{blah}

这是因为现在我必须处理在示例中第二个大括号之前没有转义的字符串。我需要一些代码来发现何时忽略某些左大括号。例如。如果沿着字符串从左到右阅读,它会看到第一个左大括号,然后当它看到第二个左大括号时,它有点说"等等,我还没有看到有效的右大括号,所以我将忽略这个"。这可能吗?我知道使用纯粹的正则表达式可能并不完全可行。

这是我在上一个问题中使用的代码的初始部分,导致问题:

var m = str.match(/{?(\.|[^{}])+}?/g);

或者另一种解决方案可能是,当用户事先键入并提交字符串时,它会在用户看不到的情况下滑入转义的反斜杠。这样做的麻烦在于知道哪些转义反斜杠要再次"隐藏"给用户......

这样的事情呢?

var str = "{foo.bar:/?a{3}}hello?{blah}world{blah2}";
var rgx = new RegExp(/}(?!})+[^{]*{/g); 
str = str.replace(rgx,"},{");
//document.write(str + "<br/>");
arr = str.split(",");
for(i=0; i<arr.length; i++) {
    document.write(arr[i] + "<br/>");
}

这里的关键是正则表达式/}(?!})+[^{]*{/g

}文字字符匹配

(?!})+断言,在上一个匹配之后,至少有一个}不匹配。

[^{]*匹配任意数量的字符,不包括{

{文字字符匹配

看到它在这里工作。

最新更新