Javascript RegEx查找[code]标记的内部内容

Javascript RegEx查找[code]标记的内部内容,javascript,regex,Javascript,Regex,如果我的字符串值如下所示: [code] hi [/code] 我可以使用此正则表达式获取标记和中间内容: /(?:(\[code\]))([\s\S]*)(?:(\[\/code\]))/gi 但是如果我有一个字符串值和多个[code]标记集,那么它将作为单个匹配项而不是多个匹配项返回: [code] hi [/code] [code] hello [/code] 我正在通过text.replace运行正则表达式,以解析中间内容,如: text.replace(re, function

如果我的字符串值如下所示:

[code]
hi
[/code]
我可以使用此正则表达式获取标记和中间内容:

/(?:(\[code\]))([\s\S]*)(?:(\[\/code\]))/gi
但是如果我有一个字符串值和多个[code]标记集,那么它将作为单个匹配项而不是多个匹配项返回:

[code]
hi
[/code]

[code]
hello
[/code]
我正在通过text.replace运行正则表达式,以解析中间内容,如:

text.replace(re, function(match, open_tag, middle, close_tag) {
    //do stuff here
    return open_tag + middle + close_tag;
});
但正如我所说,并不是有两个单独的代码集,只是作为一个单独的代码集,这可能是我使用的
\s
匹配所有内容。我如何正确地解析它


quick JSFIDLE:

只需使用非贪婪变量:

/(?:(\[code\]))([\s\S]*?)(?:(\[\/code\]))/gi

ungreedy unifier
*?
与零或更多统一,但尽可能少

此外,您还可以省略括号中
[code]
块的捕获:

/\[code\]([\s\S]*?)\[\/code\]/gi

使正则表达式更简短,可读性更强