2013-04-15 4 views
0

Проблема: я хочу получить все содержимое квадратных скобок, а затем удалить их, но только если скобки находятся в начале строки.jQuery regex квадратные скобки

Например, [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 =/^ <<([^>] +) >> (. *) /;' Но для правила var var var =/^ (?: <<([^>] *) >>)/g; ' – SpacedMonkey

1

Что-то вроде var newstring = oldstring.replace(/\[\w{3}]/, "");

+0

Спасибо, мне нужно это, но мне нужен массив со старой строкой. Например, переменная '[Foo] [ASD] текст текст Text' Вернет массив с: ' 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 
Смежные вопросы