使用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的解决方案但是不想让这个答案错了。