RegEx查找[code]标签的内部内容

时间:2015-06-04 17:44:52

标签: javascript regex

如果我有这样的字符串值:

[code]
hi
[/code]

我可以使用此正则表达式来获取标记和中间内容:

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

但是如果我有一个带有多个[code]标签集的字符串值,那么它将返回一个匹配而不是多个:

[code]
hi
[/code]

[code]
hello
[/code]

我通过text.replace运行RegEx来解析中间内容,例如:

text.replace(re, function(match, open_tag, middle, close_tag) {
    //do stuff here
    return open_tag + middle + close_tag;
});

但就像我说的那样,并不是因为有两个单独的代码集,只是作为单个代码集,并且可能是我使用\S来匹配所有内容。我该如何正确解析?

快速jsfiddle:http://jsfiddle.net/rutsk28L/

1 个答案:

答案 0 :(得分:3)

只需使用非贪婪的变体:

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

regex101 demo

ungreedy unifier *?与零或更多结合,但最少可能。

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

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

regex101 demo

使正则表达式更短,更易读。