gpt4 book ai didi

Javascript BBCode 解析器只识别第一个列表元素

转载 作者:行者123 更新时间:2023-11-29 10:00:07 25 4
gpt4 key购买 nike

我有一个非常简单的 Javascript BBCode 解析器用于客户端实时预览(不想为此使用 Ajax)。问题是,这个解析器只识别第一个列表元素:

function bbcode_parser(str) {
search = new Array(
/\[b\](.*?)\[\/b\]/,
/\[i\](.*?)\[\/i\]/,
/\[img\](.*?)\[\/img\]/,
/\[url\="?(.*?)"?\](.*?)\[\/url\]/,
/\[quote](.*?)\[\/quote\]/,
/\[list\=(.*?)\](.*?)\[\/list\]/i,
/\[list\]([\s\S]*?)\[\/list\]/i,
/\[\*\]\s?(.*?)\n/);

replace = new Array(
"<strong>$1</strong>",
"<em>$1</em>",
"<img src=\"$1\" alt=\"An image\">",
"<a href=\"$1\">$2</a>",
"<blockquote>$1</blockquote>",
"<ol>$2</ol>",
"<ul>$1</ul>",
"<li>$1</li>");

for (i = 0; i < search.length; i++) {
str = str.replace(search[i], replace[i]);
}

return str;}

[列表]
[*] adfasdfdf
[*] asdfadsf
[*] asdfadss
[/列表]

只有第一个元素被转换为 HTML List 元素,其余元素保持为 BBCode:

  • adfasdfdf
  • [*] asdfadsf
    [*] asdfadss

    我试过使用“\s”、“\S”和“\n”,但我主要习惯于 PHP Regex 而对 Javascript Regex 完全陌生。有什么建议吗?

    最佳答案

    对于多个匹配,您需要使用带有 g 修饰符的正则表达式:

      /\[b\](.*?)\[\/b\]/g,  
    /\[i\](.*?)\[\/i\]/g,
    /\[img\](.*?)\[\/img\]/g,
    /\[url\="?(.*?)"?\](.*?)\[\/url\]/g,
    /\[quote](.*?)\[\/quote\]/g,
    /\[list\=(.*?)\](.*?)\[\/list\]/gi,
    /\[list\]([\s\S]*?)\[\/list\]/gi,
    /\[\*\]\s?(.*?)\n/g);

    关于Javascript BBCode 解析器只识别第一个列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2744423/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com