使用Javascript从textarea中删除BBcode

我正在为phpBB3论坛创建一个小javscript,它计算你输入了多少字符。但我需要删除特殊字符(我设法这样做。)和一个BBcode:引用

我的问题在于引用……以及我对正则表达式知之甚少的事实。

这是我到目前为止所做的事情,但我被搁浅了:

http://jsfiddle.net/emjkc/

var text = ''; var char = 0; text = $('textarea').val(); text = text.replace(/[&\/\\#,+()$~%.'":*?{}!?(\r\n|\n|\r)]/gm, ''); char = text.length; $('div').text(char); $('textarea').bind('input propertychange', function () { text = $(this).val(); text = text.replace(/[&\/\\#,+()$~%.'":*?{}!?\-\–_;(\r\n|\n|\r)]/gm, ''); char = text.length; $('div').text(char); }); 

你最好为它编写一个解析器,但是如果你想尝试使用正则表达式, 这应该可以解决问题:

 text = $('textarea').val(); while (text.match(/\[quote.*\[\/quote\]/i) != null) { //remove the least inside the innermost found quote tags text = text.replace(/^(.*)\[quote.*?\[\/quote\](.*)$/gmi, '\$1\$2'); } // now strip anything non-character text = text.replace(/[^a-z0-9]/gmi, ''); 

我不确定这是否可行,但我认为你可以用这样的正则表达式替换所有的bbcodes:

 var withoutBBCodes = message.replace(/\[[^\]]*\]/g,""); 

它只是取代了[any char != ']' goes here]

编辑:抱歉,没看到你只想替换[quote]而不是所有的bbcodes:

 var withoutBBQuote = message.replace(/\[[\/]*quote[^\]]*\]/g,""); 

编辑:好的,您还希望删除引用的内容:

 while (message.indexOf("[quote") != -1) { message = message.replace(/\[quote[^\]]*\]((?!\[[[\/]*quote).)*\[\/quote\]/g,""); } 

我知道你已经得到了@guido的解决方案但是不想让这个答案错了​​。