2010-06-27 68 views
2

字符串的每個部分下面是我需要什麼,我猜一定是正確的順序:JavaScript中,正則表達式 - 我要抓住包含在括號

  1. 字符串的每個部分的內容放在方括號(每一個必須跟在原始字符串的其餘部分後面)需要被提取出來並存儲起來,而沒有它們的原始字符串被返回。
  2. 如果在給定的提取節的開始處有一個識別的字符串後跟一個冒號,那麼我需要識別並刪除它。
  3. 對於剩下的(逗號分隔),我需要將它轉儲到數組中。
  4. 不要嘗試分析嵌套括號。

這樣做的好方法是什麼?

編輯:下面是一個字符串的例子:

嗨,我是一個字符串[本:是,如何] [它:工作,但是,有] [可​​能是支架,配件但,冒號] [[嵌套的區段應該被忽略?]

編輯:這裏有可能是什麼結果:

一壓腳提升提取:「嗨,我是一個字符串」認定爲「本」

陣:[「是」,「如何」]

陣列認定爲「是」:「作品」,「但」, '有']

陣列沒有標籤識別:[ '由支架威力', '部件', '無', '冒號']

陣列沒有標籤識別:[]

+1

你能舉一個例子字符串和相應的結果嗎? – 2010-06-27 08:31:12

+0

這是如何工作的? – Hamster 2010-06-27 08:48:44

+0

快速註釋 - 您可能*試圖分析嵌套括號。如果你有'[token:val1,[ignore] val2]'?即使在你的例子中,嵌套的標記也會帶來一些麻煩。 – Kobi 2010-06-27 09:14:27

回答

3
var results = []; 
s = s.replace(/\[+(?:(\w+):)?(.*?)\]+/g, 
     function(g0, g1, g2){ 
     results.push([g1, g2.split(',')]); 
     return ""; 
     }); 

給出結果:

>> results = 
    [["this", [" is", " how"]], 
    ["it", [" works", " but", " there"]], 
    ["", ["might be bracket", " parts", " without", " colons "]], 
    ["", ["nested sections should be ignored?"]] 
    ] 

>> s = "hi, i'm a string  " 

請注意它會在令牌之間留下空格。此外,您可以在早期通過撥打s = s.replace(/\[\[.*?\]\]/g, '');刪除[[]]代幣 - 此代碼將其捕獲爲正常組。

+0

。謝謝。 – Hamster 2010-06-27 09:20:35

+0

是的,你會想要使用正則表達式,比如'.split(/ \ s *,\ s * /)'。一個字符串不能以相同的方式工作,'/ g'在'split'中是不需要的(但是不能用':'') – Kobi 2010-06-27 09:22:37

+0

啊,/ \ s *,\ s * /。我仍然不完全清楚g/g究竟是什麼。 – Hamster 2010-06-27 09:24:10