私が正しく理解していれば(私にはわかりませんが、申し訳ありません...)、次の2つのシナリオが許可されていると言っていると思います。
icon-white
icon-[anything]
ここで[anything]
、小文字のテキストでハイフンを含めることができますが、のように2つ(またはそれ以上)のハイフンを直接並べることはできません--
。
このパターンがどこで発生するかについてはまだ述べていませんが、元の正規表現では、このパターンはテスト文字列の先頭に固定されて発生することが示唆されているため、その場合と想定します。その場合、この正規表現は次のことに役立ちます。
^icon-white$|^icon-([a-z]+-?)+$
それを分解する:
^icon-white$
「icon-white」を正確に含むリテラル文字列と一致します
|
また
^icon-([a-z]+-?)+$
正確に「icon-」で始まり、すぐに「something」で終わるリテラル文字列と一致し([a-z]+-?)+
ます。
icon-white
さて、明確にするために-私はとの間の関係を取得していませんicon-[something]
。つまり、私が見る限り、icon-[something]
上記の3のパターンが「アイコンホワイト」の文字もカバーできない理由はありません。つまり、上記の1と2は冗長です。しかし、私はそれらをここに含めたので、あなたはおそらくもっと適切なものをつなぎ合わせることができます。
その「何か」を3から分解します。
( )+
かっこ内にあるものの1つ以上のインスタンスを意味します。[a-z]+-?
それを分解する[a-z]+-?
:
[a-z]+
少なくとも1つの文字「a」から「z」(前のハイフンの直後に追加のハイフンを避けるために、ここではハイフンを使用できないことに注意してください)
-?
オプションのハイフン(つまり、正確に0または1つのハイフン)
これは、次のテストケースと一致します。
- アイコン-白
- icon-x
- icon-xx
- icon-x-
- アイコン-xx-
- icon-xx
- icon-xx-x
- icon-xx-xx
- アイコン-xxx-
- icon-x-xx-xx-x-xxxxx-...など
これは、次のテストケースとは一致しません。
- 大文字が使用されている場合(小文字のみを指定)
- icon-(「何か」には1つ以上の文字が必要なため。
- アイコン -
- アイコン--x
- icon-x--
これがあなたのニーズをカバーすることを願っていますが、私はそれが理解できないと思います(「「アイコンホワイト」が他のクラスの横に割り当てられる唯一のクラスであることを確認してください」というあなたの説明を本当に理解していなかったため)、しかしうまくいけば私の内訳はあなたに与えるでしょうあなたが必要とする部分。
編集:
許可されているシナリオは次のとおりです。
- アイコン-[何か]
- アイコン-[何か]アイコン-白
- アイコン-白いアイコン-[何か]
ここで、[something]は、ダブルハイフンがない限り、また「白」でない限り、小文字のテキストとハイフンの任意の組み合わせです。
だから...これは「アイコン-[何か]」を定義します:icon-(?!white$)([a-z]+-?)+
これは、上記の3つのシナリオが次のとおりであることを意味します。
^icon-(?!white$)([a-z]+-?)+$
^icon-(?!white$)([a-z]+-?)+ icon-white$
^icon-white icon-(?!white$)([a-z]+-?)+$
したがって、すべてをまとめると、次のようになります。
^icon-(?!white$)([a-z]+-?)+$|^icon-(?!white$)([a-z]+-?)+ icon-white$|^icon-white icon-(?!white$)([a-z]+-?)+$
アイコンホワイトのセクションをオプションのグループとしてこれを試してみましたが、最初のセクションからのネガティブな先読みで問題が発生しました...だから...これでうまくいきます;-)