我怎样才能告诉正则表达式从字面上匹配相同的字符串?
How can I tell regex to match literally the same string?
我有一个字符串:
#Macro
#object
value=1
value=2
#EndMacroEnt
#object
value=5
value=6
#EndMacroEnt
#EndMacro
现在我想解析#Macro 和#EndMacro 之间的所有内容。
目前我正在使用这个正则表达式:
/(#Macro(.|[\r\n])+?#EndMacro)/g
问题是,这个正则表达式也在 #EndMacroEnt
处停止了!我怎样才能修改它,使用精确的字符串 #EndMacro
而不是 #EndMacroEnt
?
您应该添加 \b
以匹配单词边界。这将包括 #Macro
和 #EndMacro
到第 1 组:
(#Macro\b(.|[\r\n])+?)#EndMacro\b)
至于匹配换行符,您可以使用@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" />
在开始和结束标记处添加单词边界:
/(#Macro\b[\s\S]+?#EndMacro\b)/gi
PS:同样要匹配包括换行符在内的任何字符,最好使用:
[\s\S]
而不是:
(.|[\r\n])
我有一个字符串:
#Macro
#object
value=1
value=2
#EndMacroEnt
#object
value=5
value=6
#EndMacroEnt
#EndMacro
现在我想解析#Macro 和#EndMacro 之间的所有内容。 目前我正在使用这个正则表达式:
/(#Macro(.|[\r\n])+?#EndMacro)/g
问题是,这个正则表达式也在 #EndMacroEnt
处停止了!我怎样才能修改它,使用精确的字符串 #EndMacro
而不是 #EndMacroEnt
?
您应该添加 \b
以匹配单词边界。这将包括 #Macro
和 #EndMacro
到第 1 组:
(#Macro\b(.|[\r\n])+?)#EndMacro\b)
至于匹配换行符,您可以使用@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" />
在开始和结束标记处添加单词边界:
/(#Macro\b[\s\S]+?#EndMacro\b)/gi
PS:同样要匹配包括换行符在内的任何字符,最好使用:
[\s\S]
而不是:
(.|[\r\n])