Javascript 如何捕捉两个(编号)标记之间的所有内容,包括换行符?
我试图捕获两个标记(Javascript 如何捕捉两个(编号)标记之间的所有内容,包括换行符?,javascript,regex,Javascript,Regex,我试图捕获两个标记(START[number]和END[number])之间的所有内容,其中还需要提取数字。我需要支持换行 例如: START[1] message to capture ...END[1] 必须返回: 第1组:1 第2组: 要捕获的消息… 第三组:1 以下是我的尝试(): 它不起作用,因为我获得了由要捕获的消息的最后一个字符组成的第三组,我不知道为什么 有人能帮我吗?谢谢。使用[\s\s]而不是(.\n\r) 为确保“开始”和“结束”中的数字相同,请使用组1的反向引用
START[number]
和END[number]
)之间的所有内容,其中还需要提取数字。我需要支持换行
例如:
START[1]
message to capture ...END[1]
必须返回:
1
要捕获的消息…
1
有人能帮我吗?谢谢。使用
[\s\s]
而不是(.\n\r)
为确保“开始”和“结束”中的数字相同,请使用组1的反向引用:
(在评论中归功于Aaron de Windt)
您只是有太多的捕获组。使用内部的非捕获组:
开始\[(\d+)\]((?:。\n\r)*?)结束\[(\d+)\]
永远不要使用(。\n\r)*?
。使用专用模式匹配任何字符,如JS中的[^]
。或者像[\s\s]
/[\d\d]
/[\w\w]
这样的解决方法确实,(.|\n |\r)*?
不是处理事情的好方法,例如[\s\s]
或dotall标志s
(尚未得到广泛支持)是更好的解决方案,但是,我觉得问题源于使用括号,当不打算使用捕获组且不使用非捕获组时。您还可以将第二个“(\d+)”替换为“\1”,以便仅当两个数字相同时它才匹配。“开始[(\d+)([\s\s]+?)结束[\1]”
START\[(\d+)\]((.|\n|\r)*?)END\[(\d+)\]
START\[(\d+)\]([\s\S]+?)END\[(\d+)\]
START\[(\d+)\]([\s\S]+?)END\[(\1)\]