2015-12-07 3 views
5

JavaScriptのRegexを使用してCSSルールから最後のクラスを引き出したいと思います。最後のCSSクラスを取得する正規表現

私が行っている正規表現のルールは、ルールの最後から検索を開始することです。 「.myClass .myOtherClass'に関する、最後のピリオドの後の最初の単語を戻すために - ので、結果は私が上で一致させる必要がある」.myOtherClass'

例のCSSルールがあるでしょう:

.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{} 

私は{}の情報なしで自分たちでルールを出すことができます。したがって、正規表現はそれぞれのルールを1つずつ実行します。例えば独自の「.myClass .myOtherClass」にあります。上記のルールからの出力は、以下のようなものです:

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

誰でも助けてくれますか?

+2

何を共有してくださいYああ、すでに持っている? – giorgio

+0

私は本当にそれだけのルールをtbhを得るまで持っている。 string.replace(/ [A-Za-z0-9。#-_] * \ {/、 '').replace(/ \} /、 '').trim();その後、私は文字列の最後からいくつかの投稿を見つけました。 http://stackoverflow.com/questions/2552428/regex-use-start-of-line-end-of-line-signs-or-in-different-contextしかし、私は本当に一緒に引っ張る方法では分かりません文字が一致する。私のreg - exはかなりひどいtbhです! –

+0

これを行う究極の理由は何ですか? –

答えて

1

最初のグループを取得すると、すべてのテストケースで必要なものが得られます。

.*の貪欲のおかげで、最後のクラスは残りのパターンと一致するようになります。

Try it here

+0

brill、ありがとう! –

+1

'.menu_tab'とマッチしません。他のものも同様に動作しません。 – CoderPi

+0

@CodeiSir true。'\ w'はクラス名を構成できる文字に適していると思いますか? – Aaron

0

これはあなたの欲しいものですか?

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

ハイフンを含むクラス名で失敗するため、疑問があります。 –

1

この正規表現は、すべての有効なCSS-クラス名のために動作します:ここで(Demo here

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

JavaScriptはすべてのCSSクラス-名とも最後の1を得ることです:(Demo here

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

正規表現は部分的にから取られる:https://stackoverflow.com/a/449000/4339170

+0

彼はコメントでクラスをマッチします: '/ * .commentedOut {} * /'。これは必須ではないかもしれませんが、その解決策を見つけることができます。 – CoderPi

+0

実際には、 'a \:b'が有効なので、**は一致しません。あるいは、クラスは '!'でCSS名前空間にすることができます。 CSS(または他のほとんどの言語)をregexpで解析してはならないことを示しています。パーサを使用します。それが彼らが存在する理由です。 –

+0

http://www.w3.org/TR/CSS21/grammar.html#scannerによると、CSSの識別子は ' - ?{nmstart} {nmchar} *'であり、要求されて提供されたものです。あなたがリンクをチェックすると、原因の他のものがたくさんあります!しかし、それはこの質問の目的ではありません! – CoderPi

関連する問題