【问题标题】:Regex, get only first occurrence and stop正则表达式,只获得第一次出现并停止
【发布时间】:2013-10-18 12:39:54
【问题描述】:

我正在尝试在 css 文件中获取每个单独的 keyframes 声明并复制它,但插入 moz/ms/o 以处理每个带有关键帧的浏览器。

我正在使用这个正则表达式:

(@)(-webkit-)([\s\S]*)(\}\R\}\R@)

尝试捕获每个集合(请参阅我的Rubular 中的完整示例)

【问题讨论】:

  • 你有什么问题?你用什么语言做这个?
  • 我正在使用通用(Java/Ruby 等)正则表达式术语来重新创建 CSS 块,因此我不必手动编写它们。

标签: css regex css-animations


【解决方案1】:

试试这个:

/(@)(-webkit-)(.*?\R\})/m

m 修饰符使其成为多行正则表达式,因此 . 匹配换行符。我在最后删除了@ 的匹配项,因为它无法匹配文件中的最后一个块。而*? 使匹配不贪心,因此一次只匹配一个块。

Rubular

【讨论】:

  • @Charlesism OP 的正则表达式似乎假设了非常具体的 CSS 布局,所以我假设他正在使用一个可以确保符合预期的布局。正则表达式不擅长匹配平衡大括号,所以这可能是你能做的最好的了。
【解决方案2】:

你得到的最接近的是......

(@-webkit-[^}]*}\s*to\s*{[^}]*}\s*})

...它可以处理您的 CSS 文件 decently 中的异常/损坏的缩进。它是这样工作的:


  1. (启动捕获组...

  2. @-webkit- ...在这句话上。

  3. [^}]* } 继续,直到您看到“}”字符。

  4. \s*to\s*{接下来是短语'to',然后是'{'...

  5. [^}]* } ...继续直到下一个'}'字符。

  6. \s* } 最后一个 '}' 字符,前面可能有空格。

  7. )停止捕获。


自regex doesn't understand nesting以来,您可能会出现误报。

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多