我如何告诉正则表达式字面上匹配相同的字符串?

时间:2015-04-15 09:34:52

标签: javascript regex match

我有一个字符串:

#Macro
#object
value=1
value=2
#EndMacroEnt
#object
value=5
value=6
#EndMacroEnt
#EndMacro

现在我想解析#Macro和#EndMacro之间的所有内容。 目前我正在使用这个正则表达式:

/(#Macro(.|[\r\n])+?#EndMacro)/g

问题是,这个正则表达式也停留在#EndMacroEnt!如何修改它,使用EXACT字符串#EndMacro而不是#EndMacroEnt

Here is also online regex preview.

2 个答案:

答案 0 :(得分:4)

在开始和结束标记处添加单词边界:

/(#Macro\b[\s\S]+?#EndMacro\b)/gi

PS:为了匹配包括换行符在内的任何字符,最好使用:

[\s\S]

而不是:

(.|[\r\n])

答案 1 :(得分:2)

您应该添加\b以匹配单词边界。这将包括#Macro#EndMacro到第1组:

(#Macro\b(.|[\r\n])+?)#EndMacro\b)

Regex demo

至于匹配换行符,你可以使用@anubhava或[\w\W]*?[\d\D]*?等任何一种显示的技巧。

所以,代码可能是

var re = /(#Macro\b[\d\D]+?#EndMacro\b)/g; 
var str = '#Macro\r\n#object\r\nvalue=1\r\nvalue=2\r\n#EndMacroEnt\r\n#object\r\nvalue=5\r\nvalue=6\r\n#EndMacroEnt\r\n#EndMacro';
 
while ((m = re.exec(str)) !== null) {
   document.getElementById("res").innerHTML += "<br>" + m[1].trim().replace(/\r\n/g,"<br>");
}
<div id="res" />