Javascript 我如何告诉regex匹配同一个字符串?

Javascript 我如何告诉regex匹配同一个字符串?,javascript,regex,match,Javascript,Regex,Match,我有一个字符串: #Macro #object value=1 value=2 #EndMacroEnt #object value=5 value=6 #EndMacroEnt #EndMacro 现在我想解析出宏和EndMacro之间的所有内容。 目前我正在使用此正则表达式: /(#Macro(.|[\r\n])+?#EndMacro)/g 问题是,这个正则表达式也在EndMacront停止!如何修改它,以使用精确的字符串EndMacro而不是EndMacront 您应该在单词边界处添加

我有一个字符串:

#Macro
#object
value=1
value=2
#EndMacroEnt
#object
value=5
value=6
#EndMacroEnt
#EndMacro
现在我想解析出宏和EndMacro之间的所有内容。 目前我正在使用此正则表达式:

/(#Macro(.|[\r\n])+?#EndMacro)/g
问题是,这个正则表达式也在EndMacront停止!如何修改它,以使用精确的字符串EndMacro而不是EndMacront

您应该在单词边界处添加\b以匹配。这将包括宏和EndMacro到组1中:

宏\b.|[\r\n]+?端宏\b

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

所以,代码可能是

var re=/Macro\b[\d\d]+?EndMacro\b/g; var str='Macro\r\nobject\r\nvalue=1\r\nvalue=2\r\nendmacront\r\nobject\r\nvalue=5\r\nvalue=6\r\nendmacront\r\nEndMacro'; 而m=re.execstr!==空的{ document.getElementByIdres.innerHTML+=+m[1]。trim.replace/\r\n/g,; } 您应该在单词边界处添加\b以匹配。这将包括宏和EndMacro到组1中:

宏\b.|[\r\n]+?端宏\b

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

所以,代码可能是

var re=/Macro\b[\d\d]+?EndMacro\b/g; var str='Macro\r\nobject\r\nvalue=1\r\nvalue=2\r\nendmacront\r\nobject\r\nvalue=5\r\nvalue=6\r\nendmacront\r\nEndMacro'; 而m=re.execstr!==空的{ document.getElementByIdres.innerHTML+=+m[1]。trim.replace/\r\n/g,; }
在开始和结束标记处添加单词边界:

/(#Macro\b[\s\S]+?#EndMacro\b)/gi
PS:为了匹配任何字符,包括换行符,最好使用:

[\s\S]
而不是:

(.|[\r\n])

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

/(#Macro\b[\s\S]+?#EndMacro\b)/gi
PS:为了匹配任何字符,包括换行符,最好使用:

[\s\S]
而不是:

(.|[\r\n])

另外,为了提高效率,请替换。|[\r\n]+?使用[\s\s]+?或[\s\s]+?如果您想捕获。作为备用,为了更高效,请替换。|[\r\n]+?使用[\s\s]+?或[\s\s]+?如果你想捕获。