2012-09-20 52 views
0

我有一個看起來像這些javascript正則表達式,一次分割和匹配?

inspect [foo - bar] with [errors - 15] 
create [doodle] 
force delete [quux] 

也就是說,其中含有方括號內的信息輸入線串。

我想是走在時間的線路之一,並得到像

["inspect", "[foo - bar], "with", "[errors - 15]"] 

陣列使用正則表達式可以很容易地單獨收集括號內的表達式之間的括號內的表達式和部分:

var src = "inspect [foo - bar] with [errors - 15]" 
var regexBracketed = /\[[a-zA-Z0-9_\- ]+\]/g; 

// this returns an array of the bracketed expressions 
console.log(src.match(regexBracketed)); 

// and this returns an array of the parts between the expressions 
console.log(src.split(regexBracketed)); 

是否有一種簡單的方法可以在一個數組中獲得所有內容?也許我完全用錯誤的方式來攻擊它。

回答

2

你指的是組(捕獲圓括號)嗎? /(.*)/

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions#Using_Parenthesized_Substring_Matches

例如,如果你想捕捉括號中的字符串,那麼你可以使用這個:

var r=/^\s*[^\[\]]*\[([^\[\]]+)\](?:[^\[\]]*\[([^\[\]]*)\])?\s*$/; 
var m = "inspect [foo - bar] with [errors - 15] ".match(r); 
console.log(m[1], m[2]); 

您可以添加\s*的表達空白修剪過。

+0

你知道的,我相信自己。公認。 – PapaFreud

1

這是我做的,加上a jsFiddle

var src = "inspect [foo - bar] with [errors - 15] " + 
      "create [doodle] " + 
      "force delete [quux]"; 

var regex = /[^\[]+|[^\]]+\]/g; 

document.write(src.match(regex));​ 

輸出:

inspect ,[foo - bar], with ,[errors - 15], create ,[doodle], force delete ,[quux] 

,我相信你知道如何修剪空格,請你:)

要解釋的正則表達式,這固然看起來有點神祕,它只是說, 「把所有的字符都寫到[,或者如果你已經在[了,那麼請把所有的字符加到],再加上]!」。

1

@akonsu是正確的,它只是一個加括號的事情,就像這樣:

var src = "inspect [foo - bar] with [errors - 15]"; 
var regexCapturing = /(\[[a-zA-Z0-9_\- ]+\])/; 
console.log(src.split(regexCapturing)); 

它輸出

["inspect ", "[foo - bar]", " with ", "[errors - 15]", ""] 

一些空白修正,跳過去年空字符串和我可以了,好了。謝謝。

(我只是寫這作爲一個答案,因爲我不能使用代碼中的註釋格式。)

+0

我已經添加了一個正則表達式給我的答案,可以讓你避免清理結果數組。 – akonsu