1

複数のcssクラスを含む長い文字列があります。正規表現では、次のようにこれらのクラス名を置き換える必要があるため、すべてのクラス名を一致させたいと思います。

<span>CLASSNAME</span>

私は何時間も解決策を考え出そうとしましたが、私は近いと思いますが、特定のクラス名については、中括弧を閉じることを試合から除外することはできません。

これが私がテストを行っているサンプル文字列です:

#main .items-Outer p{ font-family:Verdana; color: #000000; font-size: 50px; font-weight: bold; }#footer .footer-inner p.intro{ font-family:Arial; color: #444444; font-size: 30; font-weight: normal; }.genericTxt{ font-family:Courier; color: #444444; font-size: 30; font-weight: normal; }

そして、これが私がこれまでに思いついた正規表現です:

((^(?:.+?)(?:[^{]*))|((?:\})(?:.+?)(?:[^{]*)))

私が得た一致をより明確に示すので、私が添付しているスクリーンショットを見てください。私の問題は、明らかに中括弧をすべての一致から除外したいということです。

正規表現の一致

明確にするために、私が求めている一致の例は次のとおりです。

  • main.items-外部p

  • フッター.footer-innerp.intro

  • .genericTxt
4

3 に答える 3

2

ネストされた中括弧がない場合にのみ、以下が機能するはずです。

/\.(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)(?![^\{]*\})/

これがデモです!

この質問は、valid-CSS-class-name正規表現を参照していることに注意してください。

編集

クラス名だけでなく、セレクター全体に一致させたいことを明確にするコメントを読みました。その場合、これを試してみてください。ただし、その堅牢性については自信がありません。

/[^}]*(?=\{|$)/

これがそのデモです

于 2012-09-12T15:51:40.447 に答える
1

これがその正規表現です

(?:(\}|^)).*?(?:\{)
于 2012-09-12T15:42:08.790 に答える
0

strにCSSが含まれているとすると、次の正規表現は次のようになります。

str.match(/(?:#\w+\s+)?\.[\w-]+(?:\s+\w+\s*\.\w+|\s+\w+)?/ig)

戻り値:

["#main .items-Outer p", "#footer .footer-inner p.intro", ".genericTxt"]

正規表現は次のとおりです。

(?:#\w+\s+)?      -- optional leading CSS id, i.e. #abc
\.[\w-]+          -- CSS classname, i.e. .ab-c
(?:
    \s+\w+\s*\.\w+  -- optional CSS elt followed by classname, i.e. p.abc
|                   -- or
    \s+\w+          -- optional CSS elt, i.e. p
)?

デモを見る

于 2012-09-12T16:10:48.763 に答える