Javascript 多行上的正则表达式捕获模式

Javascript 多行上的正则表达式捕获模式,javascript,regex,Javascript,Regex,我很难捕捉到多行的重复模式。 我相信这是一项简单的任务,但我似乎无法让它发挥作用 :用户(.*\s*) 为什么仅仅*(任何字符,包括新行?多次)不足以捕捉多行?如何调整正则表达式使其按预期工作 谢谢 我建议使用一个贪婪的标记,依靠[^]或[\s\s]来匹配任何字符,因为在JS regex中,由于没有DOTALL/s修饰符,无法重新定义点行为 使用 见 详细信息 ^-行的开头(由于使用了m修饰符,^匹配字符串和行的开头) 用户的-文字字符序列 (?:(?!^Users of)[\s\s])*-匹

我很难捕捉到多行的重复模式。 我相信这是一项简单的任务,但我似乎无法让它发挥作用

用户(.*\s*)

为什么仅仅
*
(任何字符,包括新行?多次)不足以捕捉多行?如何调整正则表达式使其按预期工作


谢谢

我建议使用一个贪婪的标记,依靠
[^]
[\s\s]
来匹配任何字符,因为在JS regex中,由于没有DOTALL/
s
修饰符,无法重新定义点行为

使用

详细信息

  • ^
    -行的开头(由于使用了
    m
    修饰符,
    ^
    匹配字符串和行的开头)
  • 用户的
    -文字字符序列
  • (?:(?!^Users of)[\s\s])*
    -匹配任何字符(请参见
    [\s\s]
    =
    [^]
    )的零次或多次(请参见
    *
    )的贪婪令牌,该令牌不会在行首启动
    子字符串的
    用户
同样的未展开正则表达式看起来像

/^Users of .*(?:\r?\n(?!Users of ).*)*/gim

在这里,回火贪婪令牌展开为

  • *
    -在
    用户之后的剩余行
  • (?:\r?\n(?!用户)。*)*
    -零次或多次出现:
    • \r?\n
      -换行符(可替换为
      (?:\r\n?|\n)
      以匹配任何常用样式换行符)
    • (?!的用户)
      -子字符串的
      用户后面不跟在后面
    • *
      -行的其余部分

我建议使用一个调和贪婪令牌,并依靠
[^]
[\s\s]
来匹配任何字符,因为在JS regex中,由于缺少DOTALL/
s
修饰符,无法重新定义点行为

使用

详细信息

  • ^
    -行的开头(由于使用了
    m
    修饰符,
    ^
    匹配字符串和行的开头)
  • 用户的
    -文字字符序列
  • (?:(?!^Users of)[\s\s])*
    -匹配任何字符(请参见
    [\s\s]
    =
    [^]
    )的零次或多次(请参见
    *
    )的贪婪令牌,该令牌不会在行首启动
    子字符串的
    用户
同样的未展开正则表达式看起来像

/^Users of .*(?:\r?\n(?!Users of ).*)*/gim

在这里,回火贪婪令牌展开为

  • *
    -在
    用户之后的剩余行
  • (?:\r?\n(?!用户)。*)*
    -零次或多次出现:
    • \r?\n
      -换行符(可替换为
      (?:\r\n?|\n)
      以匹配任何常用样式换行符)
    • (?!的用户)
      -子字符串的
      用户后面不跟在后面
    • *
      -行的其余部分

这里的规则是什么?如何定义模式?我想捕获“的用户”并转发到下一次发生。好吧,比如“为什么仅仅
*
(任何字符,包括新行?多次)不足以捕获多行?”因为
与JavaScript方言regex中的新行不匹配。要做到这一点,一个选项是使用替代选项:
。\n
。但你的问题可能不止这些。Wiktor在这里,他可能会把它盖上这里有什么规定?如何定义模式?我想捕获“的用户”并转发到下一次发生。好吧,比如“为什么仅仅
*
(任何字符,包括新行?多次)不足以捕获多行?”因为
与JavaScript方言regex中的新行不匹配。要做到这一点,一个选项是使用替代选项:
。\n
。但你的问题可能不止这些。维克托在这里,他可能会把它盖好的。太好了!非常感谢!比我想象的要复杂一点=请注意,展开正则表达式必须更有效,因为它只会在换行时“绊倒”。回火贪婪标记将在每个角色上“绊倒”。完美!非常感谢!比我想象的要复杂一点=请注意,展开正则表达式必须更有效,因为它只会在换行时“绊倒”。回火贪婪标记将在每个角色处“绊倒”。
/^Users of .*(?:\r?\n(?!Users of ).*)*/gim