2013-04-15 120 views
0

問題:我想獲取所有方括號的內容,然後刪除它們,但僅當括號位於字符串的beginnig時。jQuery正則表達式方括號

例如,[foo][asd][dsa] text text text將返回包含所有三個括號內容(0 => 'foo', 1 => 'asd', 2 => 'dsa')的數組,並且將變爲text text text

但是,如果字符串看起來像這樣:[foo] text [asd][dsa] text text,它將只需要[foo],字符串將是:text [asd][dsa] text text

我該怎麼做? (使用JS或jQuery的)

感謝, 和對不起我的英語:\

回答

2

循環檢查字符串在方括號什麼的開始,需要的內容括號,並從一開始就刪除整個批次。

var haystack = "[foo][asd][dsa] text text text"; 
var needle = /^\[([^\]]+)\](.*)/; 
var result = new Array(); 

while (needle.test(haystack)) { /* while it starts with something in [] */ 
    result.push(needle.exec(haystack)[1]);  /* get the contents of [] */ 
    haystack = haystack.replace(needle, "$2"); /* remove [] from the start */ 
} 
+0

謝謝!很棒! – HtmHell

+0

我還有一個問題。如果我想使用另一個符號,例如:'<>',我應該改變什麼? – HtmHell

+1

對於我的代碼'var needle =/^ <<([^>] +)>>(。*)/;'但對於Brugnar的'var rule =/^(?: <<([^> *)>>)/ g; – SpacedMonkey

1

喜歡的東西var newstring = oldstring.replace(/\[\w{3}]/, "");

+0

謝謝,我需要這個,但我需要一個數組與老字符串了。 例如,var [foo] [asd]文本文本將返回數組: ' 0 =>'foo', 1 =>'asd' ' – HtmHell

1

你可以繼續使用一段時間,以第一,它添加到一個數組,刪除它,然後做一次。這將給這個:

var t1 = "[foo][asd][dsa] text text text"; 
var rule = /^(?:\[([^\]]*)\])/g; 
var arr = new Array(); 

while(m = rule.exec(t1)){ 
    arr.push(m[1]); 
    t1 = t1.replace(rule, "") 
} 

alert(arr); // foo,asd,dsa 
alert(t1); // text text text