使用Javascript从文本区域删除BBcode

removing BBcode from textarea with Javascript

本文关键字:删除 BBcode 区域 文本 Javascript 使用      更新时间:2023-09-26

我正在为phpBB3论坛创建一个小的javscript,它计算您键入的字符数。但我需要删除特殊字符(我设法做到了)和一个BBcode:引用

我的问题在于引用。。。以及我对regex了解不多的事实。

这就是我目前所做的,但我被困了:

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

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

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,但不想留下这个错误的答案。