2015-04-15 186 views
1

我有一个字符串:如何判断正则表达式是否匹配字符串?

#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.

+0

另外,为了提高效率,repl如果你想捕捉,可以用'[\ s \ S] +?'或'([\ s \ S] +?)'ace'(。| [\ r \ n])+?'。 –

回答

4

在两个加字边界开始和结束标记:

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

PS:也匹配包括换行,最好是使用任何字符:

[\s\S] 

,而不是:

(.|[\r\n]) 
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" />

相关问题