JavaScript(jQueryも使用)でユーザー側でフォームバリデーションを行いたいです。目標は、ネストされた bbCode[quote]
タグをレベル 2 より深く削除することです。次のテキストがあるとします。
[quote=SoundMAX][quote=Laplundik][quote=SoundMAX]
blahblahblah[/quote]
blahblah
[/quote]
blah[/quote]
そして、これを取得します:
[quote=SoundMAX][quote=Laplundik]
blahblah
[/quote]
blah[/quote]
私の唯一のアイデアは、.replace[quote]
で.replace を<div>
作成し、DOM オブジェクトを作成し、jQuery で 2 よりも深いものをすべて削除し、すべてを bbCode に逆方向に解析することです。しかし、そのソリューションは複雑すぎるようです。もっとエレガントなソリューションはありますか?
編集:
素敵な解決策をありがとう。daroo の答えに基づいて、私はこれを行いました:
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 のソリューションは閃光のようでした。以前はコールバック関数のパラメーターの置換について知りませんでしたが、今では便利です! 私はそれで解決します。