javascript replace()具有多个html的多个bbcode实例

时间:2012-02-13 20:50:32

标签: javascript html replace bbcode

我需要使用javascript replace()函数将[b]或[/ b]的每个实例替换为<b></b>。我尝试使用全局标记,但它不起作用并且奇怪地出现:

document.write(str.replace(/[b]/g,'<b>').replace(/[/b]/g,'</b>'));

导致输出为:

[<>]<>la<>la[<>][<>]<>la<>la[<>] 

我也尝试将第一部分更改为:

  document.write(str.replace(/[[b]]/g,'<b>').replace(/[[/b]]/g,'</b>'));

哪种作品,但到处都是奇怪的......就像这样:

[blabla[/[blabla[/

我知道这里可能有一些显而易见的东西......但是我找不到它......任何帮助我都会永远爱你XD

2 个答案:

答案 0 :(得分:4)

[]/special RegExp characters

  • [a]表示:匹配任何a个字符。 [abcd]表示:匹配一个字符,即a,b,c,d之一。 [a-z]表示:匹配任何字母。
  • /用于标记RegExp的开头和结尾。

要使用文字字符,必须将其转义。

str.replace(/\[b\]/g,'<b>').replace(/\[\/b\]/g,'</b>')

请注意,可以使用反向引用合并两个正则表达式:

str.replace(/\[(\/?)b\]/g,'<$1b>')
// Replaces [b] with <b>, [/b] with </b>

答案 1 :(得分:-2)

一次更换'em'可能会好得多:

 str = "[b]foo[/b] and [b]bar[/b]"
 str.replace(/\[b\](.+?)\[\/b\]/g,'<b>$1</b>') // <b>foo</b> and <b>bar</b>

您还可以更进一步,使用一个正则表达式处理多个格式代码(在此示例中为b,i,u和s):

str = "[b]foo[/b] and [i]bar[/i]"
str.replace(/\[([bius])\](.+?)\[\/\1\]/g,'<$1>$2</$1>')

这样的表达式(带有(.+?))比你的更好,因为它们只处理有效的标记并忽略未关闭的[标签]。