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

Javascript BBCode解析器只识别第一个列表元素,javascript,regex,parsing,bbcode,Javascript,Regex,Parsing,Bbcode,我有一个非常简单的Javascript BBCode解析器用于客户端实时预览(不想使用Ajax)。问题在于,此解析器仅识别第一个列表元素: function bbcode_parser(str) { search = new Array( /\[b\](.*?)\[\/b\]/, /\[i\](.*?)\[\/i\]/, /\[img\](.*?)\[\/img\]/, /\[url\="?(.*?)"?\](.*?)\[\/url\]/,

我有一个非常简单的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;}
函数bbcode\u解析器(str){
搜索=新数组(
/\[b\](.*)\[\/b\]/,,
/\[i\](.*)\[\/i\]/,,
/\[img\](.*?\[\/img\]/,,
/\[url\=”?(.*?)?\](.*?\[\/url\]/,
/\[quote](.*)\[\/quote\]/,,
/\[list\=(.*?\])(.*?\[\/list\]/i,
/\[list\]([\s\s]*?)\[\/list\]/i,
/\[\*\]\s?(.*?\n/);
替换=新阵列(
“$1”,
"$1",
"",
"",
"$1",
"$2",
“
    $1
”, “
  • $1
  • ”; 对于(i=0;i
    [列表]
    [*]adfasdfdf
    [*]asdfadsf
    [*]asdfadss
    [/list]

    只有第一个元素转换为HTML列表元素,其余元素保留为BBCode:

  • adfasdff
  • [*]asdfadsf
    [*]asdfadss


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

    对于多个匹配,您需要使用带有
    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);
    

    尝试将g和m开关
    //gm
    开关添加到正则表达式模式中