2012-05-25 63 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

相關問題