正则表达式查找不在另一个模式内的模式

时间:2018-08-09 20:57:47

标签: css regex notepad++

我正在尝试编写一个正则表达式来查找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

请注意,它包括两个在括号外的“磅弦”,但不包括在括号内的两个“磅弦”。

1 个答案:

答案 0 :(得分:3)

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

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

它确保{位于匹配项之后(指示匹配项是选择器的一部分),但不能位于}字符之后(不包括与CSS中的颜色声明匹配的任何匹配项)。 / p>

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

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