如果我有这样的字符串值:
[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/
答案 0 :(得分:3)
只需使用非贪婪的变体:
/(?:(\[code\]))([\s\S]*?)(?:(\[\/code\]))/gi
ungreedy unifier *?
与零或更多结合,但最少可能。
您还可以省略括号中[code]
块的捕获:
/\[code\]([\s\S]*?)\[\/code\]/gi
使正则表达式更短,更易读。