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
  • 第2组:
    
    要捕获的消息…

  • 第三组:
    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)\]