【问题标题】:regex to find pattern not inside another pattern正则表达式查找不在另一个模式内的模式
【发布时间】:2018-08-09 20:57:46
【问题描述】:

我正在尝试编写一个正则表达式来查找 CSS 文件中的所有 ID 选择器。基本上,这意味着任何以#开头的单词,没关系

#\w+

除了 ... 颜色说明符也可以以 # 开头。所以我真正想要的是所有以 # 开头且不在 { 和 } 之间的单词。我不知道该怎么说。

我在 Notepad++ 中执行此操作,所以我需要那种风格的正则表达式。

顺便说一句,我的真正目标是从文件中删除所有不是 ID 选择器的内容,因此我最终只得到一个选择器列表。我的第一次尝试是

Find: [^#]*(#\w+)
Replace: \1\r\n

...然后点击全部替换。

但后来我遇到了颜色问题。

更新

有人要求举个例子。好的:

输入:

.foo {max-width: 500px;}
#bar {text-align: left;}
.splunge, #plugh {color: #ff0088;}

期望的输出:

#bar
#plugh

请注意,它包括大括号外的两个“磅字符串”,但不包括大括号内的两个“磅字符串”。

【问题讨论】:

  • #\w+(?!\s*}) 可能适合你
  • 考虑到 FFFFFF 是一个有效的 HTML ID,我看不出您如何区分这两者。你的目标是什么类型的ID?您是否专门寻找作为方法调用目标的 ID? (例如$("#myID")document.querySelector("#myID") 等)了解您的目标或期望的结果可能有助于我们提出替代想法。
  • @JosephMarikle 是的,我很快意识到我不能将测试建立在“看起来像一个有效的颜色代码”的基础上。 #FFFFFF 可能是一个不太可能的 ID,但肯定不是不可能的。而且,比如说,#BAD 或#FACE02 肯定会出现。这就是为什么我在想,如果它在大括号之间,我可以说它不是一个 ID,所以不有趣。我想这可以跳过媒体查询,现在我考虑一下。
  • @JosephMarikle 我的最终目标是我必须找到所有引用 ID 的 CSS,并且该 ID 在 Visual Basic 用户控件中。可以从另一个方向着手:找到 VB UC 中的所有 ID,然后在 CSS 中搜索它们。我不确定这会不会更容易。
  • 您能显示示例输入和预期结果吗?

标签: css regex notepad++


【解决方案1】:

这个呢?您可以使用前瞻表达式:

#\w+(?=[^}]*?{)

它确保 { 在匹配之后(表明匹配是选择器的一部分),但不在 } 字符之后(不包括与 CSS 中颜色声明的任何匹配)。

  • #:匹配必须以 # 开头
  • \w+:匹配一个或多个单词字符(可能需要调整。\w 相当于 [A-Za-z0-9_]
  • (?=...): 积极前瞻
  • [^}]*?:任何不匹配}的字符
  • {{ 字符

https://regex101.com/r/Di43hX/3

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 2013-04-03
    • 2017-04-29
    • 1970-01-01
    • 2023-01-31
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多