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

时间:2012-05-25 14:25:48

标签: javascript regex string match

我在一段时间后发布了这个问题,答案很好: 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);

或者另一种解决方案可能是当用户输入&事先提交字符串,它会以逃避的反斜杠滑动,而无需用户看到它。这样做的麻烦在于知道从用户那里再次“隐藏”反斜杠......

1 个答案:

答案 0 :(得分: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

}文字字符匹配

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

[^{]*匹配{

以外的任意数量的字符

{文字字符匹配

看到它正常工作here