我有一个非常简单的Javascript BBCode Parser用于客户端实时预览(不想使用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
[/ list]
只有第一个元素被转换为HTML List元素,其余元素保持为BBCode:
我尝试使用“\ s”,“\ S”和“\ n”,但我主要习惯使用PHP Regex和Javascript Regex全新。有什么建议吗?
答案 0 :(得分:4)
对于多个匹配,您需要使用带有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);
答案 1 :(得分:1)
尝试将g和m开关/<regex>/gm
开关添加到正则表达式模式中。