2013-02-19 78 views
1

我为phpBB3论坛创建了一个小型javscript,用于统计您输入的字符数。 但是我需要删除特殊字符(我设法这么做)和一个BBcode :报价使用Javascript从textarea中删除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); 
}); 
+0

可以了[quote]元素进行拼图? – 2013-02-19 12:02:25

+0

是的。它可以被关联三次。 – NaGeL182 2013-02-19 12:03:08

+1

你只想去掉bbcode标签或者[quote]和[/ quote]之间的内容? – 2013-02-19 12:09:17

回答

1

你最好写一个分析器,但是如果你想尝试用正则表达式,this应该做的伎俩:

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, ''); 
+0

没有去除报价中的什么。你通过写一个解析器怎么样?一个函数呢? – NaGeL182 2013-02-19 12:53:54

+0

好的没关系。 jsfiddle一个没有,但是在我开启了替换命令后,它开始工作。订单在答案中是正确的谢谢! - JS小提琴http://jsfiddle.net/TS26r/ – NaGeL182 2013-02-19 12:59:31

+0

mmh其实它仍然在标签不平衡的情况下出现故障 – 2013-02-19 13:00:52

0

我不知道这是否会工作,但我认为你可以替换所有bbcodes像这样的正则表达式:

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

它只是取代一切都像[any char != ']' goes here]

编辑:对不起,没看到你只需要更换[报价],而不是所有bbcodes:

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

编辑:好吧,你也想引用内容删除:

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

我知道你已经有了@guido的解决方案,但不想让这个答案错误。

+0

谢谢你的作品像魅力 - http://jsfiddle.net/emjkc/1/ – NaGeL182 2013-02-19 12:32:59

+0

@ NaGeL182不,它不。 http://jsfiddle.net/URSUW/ – 2013-02-19 12:35:44

+0

是的,它不计算两个引号之间的字符,我明白了。我跳过枪。尽管如此,谢谢你的帮助。 – NaGeL182 2013-02-19 12:40:53