2015-12-07 9 views
5

Chciałbym wyciągnąć ostatnią klasę z reguł css przy użyciu Regex w javascript.Regex, aby uzyskać ostatnią klasę css

Reguła regex, na którą idę, polega na rozpoczęciu wyszukiwania od końca reguły, np. na „.myClass .myOtherClass' i przywrócić pierwsze słowo po ostatniej kropce - tak wynik nie byłby

Przykład reguły css” .myOtherClass' muszę dopasować na:

.myClass{color:red;} 
.myClass .myOtherClass{color:green;} 
#something .somethingElse{color:blue;} 
.something #myIdhere{color:purple;} 
#myId {color:black} 
.myClass1, .myClass2{colour:green} 
.myClass span{colour:purple} 
.myPseudo:after{} 

Mogę uzyskać reguły na własną rękę bez informacji {}. Więc jego regex będzie uruchamiany po jednym z reguł na własną rękę. na przykład w ".myClass .myOtherClass" na własną rękę. Wyjście z powyższych reguł, które chciałbym uzyskać, to takie, które pasują do poniższych:

.myClass 
.myOtherClass 
.somethingElse 
.something 
no match 
.myClass2 
.myClass 
.myPseudo 

Czy ktoś może pomóc?

+2

Proszę podzielić co y już masz? – giorgio

+0

Naprawdę mam tylko do uzyskania reguł tbh, np. string.replace (/ [A-Za-z0-9. # -_] * \ {/, '') .replace (/ \} /, '') .trim(); Potem znalazłem kilka postów zaczynając od końca łańcucha, np. http://stackoverflow.com/questions/2552428/regex-use-start-of-line-end-of-line-signs-or-in-different-context Ale nie jestem pewien, jak to połączyć z dopasowaniem postaci. Mój reg-ex jest całkiem okropny tbh! –

+0

Jaki jest najlepszy powód, dla którego próbujesz to zrobić? –

Odpowiedz

1
.*(\.[a-zA-Z0-9]*) 

Pobranie pierwszej grupy daje ci to, czego chcesz dla wszystkich przypadków testowych.

Działa dzięki chciwości .*, która dopasuje się tak bardzo, jak to możliwe, pozostawiając ostatnią klasę do dopasowania do reszty wzoru.

Try it here

+0

Brill, dziękuję bardzo! –

+1

To nie będzie pasować do '.menu_tab' .. i całkiem sporo innych rzeczy też nie będzie działać. – CoderPi

+0

@CodeiSir true.Czy uważasz, że '\ w" byłby odpowiedni dla postaci, które mogą stanowić nazwę klasy? – Aaron

0

Czy tego chcesz?

var str = 'your css'; 
var hits = str.match(/\.\w+/gm); 
var css = hits.pop(); //hits[hits.length-1]; 
+0

Wątpliwe, ponieważ nie powiedzie się w nazwach klas, w tym myślnikach. –

1

ten RegEx działa na wszystkich ważnych CSS-Class-Names: (Demo here)

(\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*) 

Oto JavaScript, żeby uzyskać wszystkie CSS-klasy nazwiska i jednocześnie ostatnim (Demo here)

var css = '' 
var classNames = css.match(/(\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*)/g) 
var lastClass = classNames[classNames.length - 1] 

regex jest częściowo zaczerpnięte z: https://stackoverflow.com/a/449000/4339170

+0

Notatka jego będzie pasować klasy w komentarzach: '/ * .menededOut {} * /'. Również to może nie być konieczne, może uda się znaleźć rozwiązanie tego problemu. – CoderPi

+0

Właściwie to ** nie ** pasuje, ponieważ 'a \: b' jest ważne. Lub klasa może być nazwana CSS z '!'. Pokazuje, że nie należy parsować CSS (lub większości innych języków) za pomocą wyrażenia regularnego. Użyj parsera; dlatego istnieją. –

+0

Według http://www.w3.org/TR/CSS21/grammar.html#scanner i identyfikator w CSS to '-? {Nmstart} {nmchar} *, który jest dokładnie tym, o co prosiła i podała. Ponieważ istnieje wiele innych rzeczy, jeśli zaznaczysz link! Ale to nie jest celem tego pytania! – CoderPi