【问题标题】:Regex for source minification用于源缩小的正则表达式
【发布时间】:2014-05-13 13:33:16
【问题描述】:

什么正则表达式可以做以下事情?

  1. 删除所有空格,除非不在两个字母数字字符之间
  2. 在两个字母数字字符之间,替换为 一个空格

【问题讨论】:

  • "除非不介于" == "介于"?另外,什么应该用空格代替?一个空格? alphnum 之间的一切?另外,您的尝试在哪里失败了?
  • 您使用哪种语言/工具?
  • 我自己的缩小只是去掉了\r\n\t,因为它们专门用于格式化。我相信自己不会使用两个空格:p
  • @Robin alert('hi');\nvar a = function => alert('hi');var a=function.
  • @anubhava,PHP,因此是标签 ;)

标签: php regex preg-replace


【解决方案1】:

一个简单的解决方案是替换

(\w )\s*(\w)|\s+

\1\2

这会将两个 alphnum 之间可能存在的多个空格替换为一个,并删除所有其他空格。因为它(显然)不考虑引号内的空格和所有“特殊情况”。

demo here

【讨论】:

  • 足够接近了。谢谢。
  • @MajidFouladpour:你的问题还有什么要回答的?
  • 当空格在一个字母数字和一个非字母数字之间时,它应该被认为是完全可以删除的。因此,我们的目标是在两边都有一个字母数字字符时用单个空格字符且仅替换。
  • @MajidFouladpour 这不是它的作用吗? a =a=\w[0-9a-zA-Z_] 的缩写,是这个问题吗?
  • 我的错。确实如此。再次感谢。越看越喜欢!
【解决方案2】:

删除空格,除非被字母数字包围:

'/(?<![a-zA-z0-9 ]) +| +(?! *[a-zA-z0-9])/'

Online Demo 1

用单个空格替换空格使用这个正则表达式:

'/(?<=[a-zA-z0-9]) +(?=[a-zA-z0-9])/'

Online Demo 2

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2018-12-02
    相关资源
    最近更新 更多