Çok normal ifadeyi anlamıyorum ve iki dizeyle eşleşen bir tane oluşturmak istiyorum.İki dizeyle eşleşen Javascript normal ifadesi
Bir dize için kod .match(/something/)
olduğunu biliyoruz ve
.match(/something|someotherthing/)
nasıl hem dizeleri
Çok normal ifadeyi anlamıyorum ve iki dizeyle eşleşen bir tane oluşturmak istiyorum.İki dizeyle eşleşen Javascript normal ifadesi
Bir dize için kod .match(/something/)
olduğunu biliyoruz ve
.match(/something|someotherthing/)
nasıl hem dizeleri
Tek bir düzenli ifadeyle yapmak için, her iki sırada da gelebileceklerini dikkate almanız gerekir. (.*
iki alt dizeleri arasına herhangi bir karakter eşleşir):
/google.*microsoft|microsoft.*google/
Not: Bu ipin ucu alacağı 2'den fazla alt dizeleri yapmak istiyorsa. 3 dizi 6
farklı sipariş, 5 dizeleri 120
siparişleri gelebilir, ve 10 altbölümler 3628800
farklı şekillerde sipariş edilebilir! Bu nedenle Patlama Hapları yanıtında olduğu gibi, dilin (Javascript) özelliklerinin kullanılması, düzenli bir ifadeyle çok fazla uğraşmaya çalışmaktan çok daha iyi olabilir.
Sadece Ayrıca
.match(/google.*microsoft|microsoft.*google/)
diğer cevaplar mükemmel olan bir ayrıntılı normal ifadeler kullanabilirsiniz o .indexOf
kullanmak daha hızlı olabilir Bu durumda .match
iki kez
str.match(/google/) && str.match(/microsoft/)
kullanabilirsiniz özel probleminiz için iyi, ama iki kelimeden fazla olduğunda Paulpro'nun dikkat çektiği gibi.
En kolay yol, Patlama Hapı'nın önerdiği gibi çoklu kontroller kullanmaktır.
Ancak daha ölçeklenebilir için
regex okunur yaklaşım sen lookaheads kullanabilirsiniz:/^(?=.*google)(?=.*microsoft)(?=.*apple).../
ilk şart (.*google
ölcüsemedigi) kontrol edilir sonra çok lookahead aslında hiçbir şey tüketmez, öyle dize başında geri ve sonraki koşulu kontrol edebilirsiniz. Model sadece tüm lookaheads yaparsa geçer. girişinizi Satır sonlarını içerebilir eğer .*
yapmayacağım
Not. Bunun yerine [^]*
veya [\s\S]*
'u kullanmanız gerekecek (aynı şekilde diğerlerinin cevapları için de geçerli).
@ m.buettner mükemmel nokta. –
"Match" ı iki kez kullanabileceğimi biliyorum ama bunu daha kısa yapmak için regex ile istedim .. ama regex ile "match" iki kez kullanmaktan daha uzun gibi görünüyor – Enve
@Enve kısa kodu mutlaka en çok okunabilir bir. Özellikle "uzun" kod zaten bir veya iki satırda uyuyorsa. Karmaşık ifadeyi kullanarak –