2011-01-10 17 views
122

ile başlayıp başlamadığını sınamak için regex Bir dize başlangıcını kontrol edecek bir regexp ayarlamaya çalışıyorum ve http:// veya https:// içeriyorsa, eşleşmelidir.Dize http: // veya https: //

Bunu nasıl yapabilirim? [] bir karakter sınıfını gösterir ve bu nedenle sadece hiç bir karakteri eşleştirmek unutmayın -

^[(http)(https)]:// 
+5

sen dize sadece bir başlangıç ​​kontrol ediyorsanız sonra her şeyi eşleştirmek, bu muhtemelen Sadece dizinin ilk birkaç karakterinin, aradığınız desenlerle düz bir şekilde karşılaştırılması daha hızlıdır. – templatetypedef

+2

'[]' ile bir * karakter grubu * oluşturuyorsunuz. '**' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '* '' ile işlenir Yani 's: // 'ile eşleşir ancak ht: //' veya 'x: //' ile eşleşmez. –

+2

@templatetypedef: Sanırım bazı erken optimizasyonları hissediyorum. – cdhowie

cevap

232

[] kullanımınız yanlıştır: Ben çalışmıyor aşağıdaki çalışıyorum. [(http)(https)] ifadesi, bir (, bir t, bir t, bir t, bir p, bir ) veya bir s eşleşmesi anlamına gelir. " (Yinelenen karakter göz ardı edilir.)

bu deneyin:

^(http|https):// 
+0

PHP giriş dizesi olarak: $ regex = '/^(? https: \/\ /) '; –

+5

Steve, sanırım sonunda bir cevap kaçırdınız: $ regex = '/^(https?: \/\ /) /'; – Axi

+3

Sadece bir somun kazayla http: $ regex = '/^(https?: \/\ /)/I'; – jeffkee

21
^https?:// 

Kaçmak gerekebilir: Gerçekten almaşını kullanmak istiyorsanız

^https?:// 

yerine bu sözdizimini kullanın içeriğe bağlı olarak eğik çizgiler olsa.

12

Bu duyarsız

^(http|https):// 
21

Kılıfı çalışması gerekir:

var re = new RegExp("^(http|https)://", "i"); 
var str = "My String"; 
var match = re.test(str); 
2

^https?:\/\/(.*)(.*)https://

İlgili konular