2017-11-17 133 views
5

Bu regex var. Bu sözde kod CSS girişi düşünün:RegEx, karakterle başlarsa eşleşmiyor mu?</p> <p><code>/(((w+)|(.w+)|(#w+)|*)([(.+(=".+"|*".+"|^".+"|))])?(::|:)?)+(?=[ S]*{)/gm</code></p> <p>CSS seçicileri maç için kullanmaya çalışıyorum:

.main { 
    property: value; 
} 

.one, .two a[href$=".com"] { 
    .subclass { 
    property: value; 
    } 
} 

.test:before, .test:after:active {} 

desen yukarıda aşağıdaki eşleşmeleri döndürür: O pseudo seçicileri denk gelmiyor bu yüzden desen değiştirmeye çalışıyorum

['.body', '.one', '.two', 'a[href$=".com"]', '.subclass', '.test:before', '.test:after:active'] 

. Yani tüm diğer eşlemeler geçerli olmalı, ancak .test:before sadece .test olmalı veda .test ile eşleşmelidir. Bunu negatif bir arkaplan olmadan ya da ilk karakter : ise eşleşmemenin bir yolu olmadan bunu yapmanın bir yolunu düşünemiyorum.

Bunu Node uygulamasında yapıyorum ve yalnızca düzenli ifadelerimi kullanmak için komut dizimi Node> 9.2.0'a kilitlemek istemiyorum.

Herhangi bir fikir çok takdir edilecektir!

+0

sadece '(w + \. \)' Kullanılarak nesi var? – CAustin

+0

@CAustin yalnızca sınıf seçicilerine uygun. Muhasebeleştirilmesi gereken tonlarca başka sahte olmayan seçici model var. –

+0

Eşleştirmeye çalıştığınız diğer şeyleri içeren güncelleştirilmiş bir giriş örneği verebilir misiniz? – CAustin

cevap

1

(?!.*:)(?:[.#]\w+|\w+\[.*\])

Böyle bir şey kullanabilir?

Bu, bir kolonun yanında herhangi bir şey yakalamadığından emin olmak için olumsuz bir görünüm kullanır ve aynı zamanda psuedo css öğeleri için eşleştiricinizin basitleştirilmiş bir sürümünü kullanır.

See it working here