0

使用以下输入:

#element{ color: #333; }
#element2,
.element3,
.whatever{ background: red; }

.test,
.test2, .test3,
#test111,
.element5555, #fooooooter{ display: none; }

#element8 tr .bacon{ font-size: 10000em; }

我如何使用正则表达式来匹配这些:

#element  
#element2  
#element8
#test111

并且不匹配这些:

#333

到目前为止,我尝试了更多的变化,但我想不出任何有用的东西。

这是我最新尝试的:

(#).*[{]

但它似乎跳过了一些选择器。

4

5 回答 5

4

#-?[_a-zA-Z]+[_a-zA-Z0-9-]*(?=[^}]*\{)

它显式匹配 CSS 选择器中的有效字符。哪些字符在 CSS 类名/选择器中有效?

http://regexr.com?36e6v

不要忘记content: '{}'在应用此正则表达式之前删除评论和引用。使用正则表达式可以匹配评论和引用。单独使用展开技能将其移除。(我认为展开是复杂且低效的,足以排除集成。)

如果{}块像在 Sass 中那样嵌套,它确实匹配颜色,更少

于 2013-09-22T08:03:31.257 回答
0

好的,看看这个,它完全符合你的需要;

^\#[a-z]+[0-9]* //(Multiline = true)

如果您需要捕获ID Name,请使用它;

^\#(?<IDName>[a-z]+[0-9]*)  //(Multiline = true)

此正则表达式有一个名为IDName的捕获组,它为您提供ID 的名称

演示在这里

于 2013-09-21T22:42:43.607 回答
0

Upadated based on a comment

This will work for you:

/(?![^{]+})(#\S+)\b/g

Check it here: http://regex101.com/r/rF9iR9

于 2013-09-22T07:17:01.113 回答
0

试试这个 /#[^1-9]+/g

var t=" #element ";
var p=t.search(/#[^1-9]+/g);
alert(p);

或 /#[^1-9.@#$%^&*()!]+/g 如果要删除除数字以外的更多符号

于 2013-09-22T06:31:42.313 回答
0

好的,我想我明白了(http://regexr.com?36e5i):

#[^{,;]*(?:[{,\n])还将匹配 id 后跟其他选择器(例如,#element8 tr .bacon

#[^ {,;]*(?:[ {,\n])只会匹配 ids (所以你会#element8从上面的例子中得到部分,而不是其余部分)

于 2013-09-21T22:56:42.743 回答