-1

我不久前发布了这个问题,得到了很好的回答: Complex regex to split up a string

我知道有一个与之相关的新难题,我真的无处可去……

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

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

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

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

我希望它这样做:

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

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

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

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

或者另一种解决方案可能是,当用户事先键入并提交字符串时,它会滑入转义的反斜杠,而用户看不到它。这样做的问题是知道哪个转义反斜杠再次对用户“隐藏”......

4

1 回答 1

3

这样的事情呢?

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

}文字字符匹配

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

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

{文字字符匹配

看到它在这里工作。

于 2012-05-25T14:51:00.737 回答