我需要使用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
答案 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>')
这样的表达式(带有(.+?)
)比你的更好,因为它们只处理有效的标记并忽略未关闭的[标签]。