2012-05-25 31 views
-1

我张贴了这个问题而回,这是回答得很好: Complex regex to split up a string复杂的正则表达式来分割字符串 - 第2部分

我知道有与此相关的一个新的难题,而且我真的不Anywhere入门。 ..

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

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

使用在上一篇文章所提供的代码,它这样做:

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

我希望它这样做:

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

这是因为我现在要处理的是不要在示例中的第二大括号前有一个逃生的字符串。我需要一些可以识别什么时候忽略某些开放大括号的代码。例如。如果从左到右阅读字符串,它会看到第一个开口花括号,然后当它看到第二个开口花括号时,它有点说“挂着,我还没有看到有效的关闭花括号,所以我打算忽略这个'。这可能吗?我明白,它可能不完全可能使用纯粹的正则表达式。

这是我从这是造成问题前一个问题使用的代码的起始部分:

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

或者另一种解决方案可能是,当用户键入&事先提交的字符串,它在没有用户看到的情况下滑入反斜线中。这样做的麻烦是知道哪些逃避反斜杠从用户'隐藏'...

+1

乍一看,它看起来像递归和/或迭代正则表达式的工作。 – kevlar1818

回答

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字符数。

+0

抱歉,延迟。这是一个好主意,并且就我给出的例子而言是有效的。但是,在这个问题中,我忽略了提到在这些领域之间可能存在任何东西,正如我以前的相关问题所提到的那样。例如。一个字符串可能看起来像这样:{foo.bar:/?a{3\}}hello{blah}world{blah2}。尽管我已经投了这个答案! – WastedSpace

+0

你解决了你自己的问题吗?或者我应该修改我的答案? – kevlar1818

+0

这些字段之间的文本会发生什么?你可以编辑你的问题,使用测试字符串'{foo.bar:/?a {3 \}} hello {blah} world {blah2}'来显示输出吗? – kevlar1818

相关问题