javascript 用多个 html 替换()多个 bbcode 实例

发布于 2025-01-05 00:11:28 字数 616 浏览 2 评论 0原文

我需要使用 javascript Replace() 函数将 [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

I need to get the javascript replace() function to replace every instance of a [b] or [/b] with <b> or </b>. I tried this with the global tag but it doesn't work and comes out oddly:

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

results in the output being:

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

I also tried changing the first part to:

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

which kind of works, but there's odd ]s everywhere... like so:

[blabla[/[blabla[/

I know there's probably something obvious I'm missing here... But I can't find it... any help and I will love you forever XD

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

肩上的翅膀 2025-01-12 00:11:28

[]/特殊 RegExp 字符

  • [a] 表示:匹配任何a 字符。 [abcd]表示:匹配一个字符,为a、b、c、d之一。 [az] 表示:匹配任意字母。
  • / 用于标记正则表达式的开始和结束。

要使用文字字符,必须对它们进行转义。

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

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

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

[, ] and / are special RegExp characters.

  • [a] means: Match any a character. [abcd] means: Match one character, which is one of a, b, c, d. [a-z] means: Match any letter.
  • / is used to mark the beginning and end of a RegExp.

To use the literal characters, they have to be escaped.

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

Note that both Regular expressions can be merged, using a backreference:

str.replace(/\[(\/?)b\]/g,'<$1b>')
// Replaces [b] with <b>, [/b] with </b>
鲜血染红嫁衣 2025-01-12 00:11:28

一次替换它们可能会更好:

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

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

You might be much better off replacing 'em both at once:

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

You can also go one step further and handle multiple formatting codes (b, i, u and s in this example) with one single regular expression:

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

Expressions like this (with (.+?)) are better than yours because they only handle valid markup and ignore unclosed [tags].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文