【问题标题】:How to find everything that is not matching a regular expression如何查找与正则表达式不匹配的所有内容
【发布时间】:2012-09-05 14:43:43
【问题描述】:

我想在数千个 HTML 代码中搜索高度、宽度或任何其他 CSS 的不良做法。

例如,我想获取所有没有提供高度单位的地方,例如应该找到height:40,但不应该找到height:40px

为此,我正在使用搜索程序代理 ransack,我可以在其中放置正则表达式以在文件中进行搜索。

目前我的正则表达式是:

(height:)[\s]*[0-9]*\.?[0-9]+(px) 

这会找到类似于height:40px 的所有内容。 (稍后我想添加宽度或其他东西)

我的问题是如何在所有这些之上做一个 NOT?

或者有没有其他好的应用程序来搜索文件中的正则表达式?

【问题讨论】:

    标签: css regex regex-negation


    【解决方案1】:

    使用负前瞻(?!regex),例如:

    height:\s*\d+(?:\.\d+)?(?!px|\d)
    

    需要\d 来防止回溯备选方案匹配。

    【讨论】:

    • 感谢您的快速响应,但这似乎效果不佳。我已经检查了搜索程序 (agentRansack) 以及在线正则表达式:gskinner.com/RegExr 这似乎仍然返回不需要的结果。
    • 不工作例如 height:440px - 它仍然在这个字符串中找到并返回 height:44
    • @Tal,因为\d+ 回溯。 (?!px) 检查以下不是px,它不是0px。查看更新。
    • 非常感谢,但仔细检查,这仍然没有捕捉到高度:例如 4.5px。以下是最后一个正确的: height:\s*\d+(?:\.\d+)?(?!px|\d|\.\d)
    【解决方案2】:

    考虑使用已经执行此操作的程序,并添加您自己的规则。通常,修复源代码的做法称为“linting”。因此,您可以快速找到类似 CSSLint 之类的开源工具并允许自定义规则:

    https://github.com/stubbornella/csslint/wiki/Rules

    http://csslint.net/

    【讨论】:

      【解决方案3】:

      以这种方式使用负前瞻:

      (?!height:\s*\d+(?:\.\d+)?px)height:\s*\d+(?:\.\d+)?
      

      考虑到您正在使用 css,您可能希望将其他单位作为有效单位,例如 ptem% 等...就像下面的正则表达式

      (?!height:\s*\d+(?:\.\d+)?(?:px|pt|em|%|cm|mm|in|ex|pc))height:\s*\d+(?:\.\d+)?
      

      你可以通过Rubular进行测试

      【讨论】:

        猜你喜欢
        • 2013-06-21
        • 2011-04-13
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多