使用正则表达式javascript删除phpbb标记

时间:2011-03-13 12:15:31

标签: javascript regex

我正在尝试使用javascript删除矩形括号(bbcode样式),这是为了删除不需要的bbcode。 我试着这个。

theString .replace(/\[quote[^\/]+\]*\[\/quote\]/, "")

它适用于此字符串示例:

theString = "[quote=MyName;225]Test 123[/quote]";

在此示例中将失败:

theString = "[quote=MyName;225]Test [quote]inside quotes[/quote]123[/quote]";

如果regex旁边有任何解决方案没问题

3 个答案:

答案 0 :(得分:2)

其他2个解决方案根本不起作用(请参阅我的评论)。要解决此问题,首先需要创建一个与最内部匹配的引用元素(既不包含[QUOTE..]也不包含[/QUOTE])匹配的正则表达式。接下来,您需要迭代,反复应用此正则表达式,直到不再有QUOTE元素为止。这个测试过的功能可以满足您的需求:

function filterQuotes(text)
{ // Regex matches inner [QUOTE]non-quote-stuff[/quote] tag.
    var re = /\[quote[^\[]+(?:(?!\[\/?quote\b)\[[^\[]*)*\[\/quote\]/ig;
    while (text.search(re) !== -1)
    { // Need to iterate removing QUOTEs from inside out.
        text = text.replace(re, "");
    }
    return text;
}

请注意,此正则表达式使用Jeffrey Friedl的“展开循环”效率技术,不仅准确,而且启动速度非常快。

请参阅:Mastering Regular Expressions (3rd Edition)(强烈推荐)。

答案 1 :(得分:1)

试试这个:

/\[quote[^\/]+\].*\[\/quote\]$/

$符号表示只应使用字符串末尾的结束引号元素来确定您尝试删除的引号的结尾。

我加了一个“。”在星号之前,这将匹配之间的任何标志。我用你的两个字符串对它进行了测试,结果很有效。

编辑:我不知道你是如何使用它的。但仅作为补充。如果您希望模式也匹配没有添加属性的字符串,例如:

[quote]Hello[/quote]

您应该将“+”符号更改为星号,如下所示:

/\[quote[^\/]*\].*\[\/quote\]$/

答案 2 :(得分:0)

这个答案有瑕疵,请参阅Ridgerunner的答案以获得更正确的答案。

这是我对它的抨击。

function filterQuotes(text)
{
    return text.replace(/\[(\/)?quote([^\/]*)?\]/g,"");
}