Я хочу сделать проверку формы на стороне пользователя с помощью JavaScript (jQuery также используется). Цель состоит в том, чтобы удалить вложенную BBcode [quote]
теги глубже, чем уровень 2. Скажем, у нас есть этот текст:JavaScript: Найти вложенные [цитата]
[quote=SoundMAX][quote=Laplundik][quote=SoundMAX]
blahblahblah[/quote]
blahblah
[/quote]
blah[/quote]
И получите это:
[quote=SoundMAX][quote=Laplundik]
blahblah
[/quote]
blah[/quote]
Моя единственная идея состоит в том, чтобы .Привернуть [quote]
с <div>
, затем создайте объект DOM и удалите что-нибудь глубже, чем 2 с помощью jQuery, и проанализируйте все обратное на bbCode. Но это решение кажется слишком сложным, есть ли более элегантный?
EDIT:
Спасибо за хорошие решения. Основываясь на ответе дариоо, я сделал это:
var text=$('#edit-privatemsgbody').val();
var tmp=[];
var level=0;
for (var i=0,l=text.length;i<l;i++){
if(text[i]=='['&&text[i+1]=='q') level++;
if(text[i-6]=='q'&&text[i-7]=='/'&&text[i-8]=='[') level--;
if(level<3) tmp.push(text[i]);
}
alert(tmp.join(''));
Что работает просто отлично.
Но решение idealmachine было похоже на вспышку. Я не знал о параметрах функции обратного вызова раньше, теперь это удобно! Я соглашусь с этим.
* Не * с регулярным выражением: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – PleaseStand 2010-11-26 08:21:21