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

时间:2017-02-08 10:27:50

标签: javascript regex

我在多行上捕捉重复模式时遇到问题。 我相信这是一项简单的任务,但我似乎无法让它发挥作用!

Check this exampleUsers of (.*\s*)

Users of 85838NAVSIM_F:  (Total of 2 licenses issued;  Total of 2 licenses in use)

----- ends here!

  "85838NAVSIM_F" v1.000, vendor: adskflex
  floating license

    1 RESERVATION for PROJECT 1 (SRV02/27000)

----- should catch to here (and repeat on next)!

Users of 67600NAVMAN_F:  (Total of 2 licenses issued;  Total of 2 licenses in use)

  "67600NAVMAN_F" v1.000, vendor: adskflex
  floating license

    1 RESERVATION for PROJECT 2 (SRV02/27000)

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议使用一个驯化的贪婪令牌并依赖[^][\s\S]来匹配任何字符,因为在JS正则表达式中,由于缺少DOTALL / {{而无法重新定义点行为1}}修饰符。

使用

s

请参阅regex demo

<强>详情

  • /^Users of (?:(?!^Users of )[\s\S])*/gim - 该行的开头(使用^修饰符,m匹配字符串和行的开头)
  • ^ - 文字字符序列
  • Users of - 一个与任何字符匹配的调和贪婪令牌(请参阅(?:(?!^Users of )[\s\S])* = [\s\S])零次或多次(请参阅[^])未启动{{1行开头的子字符串

相同的展开式正则表达式看起来像

*

请参阅another regex demo

这里,调和的贪婪令牌被展开为

  • Users of - /^Users of .*(?:\r?\n(?!Users of ).*)*/gim
  • 之后的其余部分
  • .* - 零次或多次出现:
    • Users of - 换行符(可以替换为(?:\r?\n(?!Users of ).*)*以匹配任何常见的样式换行符...)
    • \r?\n - (?:\r\n?|\n) substring
    • 后面没有
    • (?!Users of ) - 其余部分。