2012-11-28 23 views
9

Ben bir dize aşağıda gibi var: Ben tire maç gerekirJavaScript Regex maç için sadece tek bir olay yok az çok

single-hyphen 

. Bununla birlikte, yalnızca kısa bir çizgi ile eşleşmek istiyorum, az ya da çok değil.

Yani yukarıdaki dize gerçek dönecektir, ancak iki Aşağıda yanlış olacaktır:

1. a-double-hyphen 
2. nohyphen 

Bunu nasıl yapmak için bir normal ifade tanımlıyorsunuz?

Şimdiden teşekkürler.

+0

Yani sonradan önce en az 1 diğer karakter ve en az 1 diğer karaktere sahip bir gerekliliktir "-"? Ya da hayır, sadece dizide tam olarak "-" için basit bir kontrol var mı? "-asdf" veya "asdf" gibi mi geçerli? – Ian

+0

Başta ve sonda "-" dışında bir karaktere sahip olmanız gerekiyorsa, böyle bir şey kullanabilirsiniz: http://jsfiddle.net/NmWTy/1/ - muhtemelen en verimli değil ve regex kullanmayın, ama sadece bir seçenektir - bu yüzden bir yorum, bir cevap değil. – Ian

+0

@Ian Thanks. Ben özellikle aşağıda bulduğum bir regex arıyordum. –

cevap

20

Bu

/^[^-]+-[^-]+$/ 

^ dize

$ başlangıcını göstermektedir yapabilirsiniz -

dışında birçok karakter

[^-]+ maçlar 1 dize ucunu göstermektedir

+0

Neden [^ -] *? 'Ve değil [[^ -] *'? – Dancrumb

+0

@Dancrumb oops..thx işaret etmek için – Anirudha

+2

İsteksiz eşleme yararlı değil ve '' 'yerine' + 'yi kullanırdım. Daha iyi: '^ [^ -] + - [^ -] + $' – Tomalak

3

Garip (ve bir Regex değil) ... ama neden olmasın?

2 === str.split("-").length; 
+1

Lol ... evet, Forrest Gump'un böyle yapmış olabileceği gibi. Muhtemelen bunu sahip olduğunuza benzer yapmış olabilirim ama bir regex'e ihtiyacım vardı. –

+0

@ChuckUgwuh Eh, bu durumda eğer bir * gereksinim * ise, regex için giderdim. – VisioN

+0

Evet, bir gereklilikti. Yine de öneri için çok teşekkürler. Sadece Forrest Gump referansıyla konuş. –

2
/^[^-]*-[^-]*$/ 

Dize başlangıcı, herhangi bir sayıda tire olmayan, bir kısa çizgi, herhangi bir sayıda tire olmayan, dize sonu.

String.prototype.hasOne = function (character) { 
    var first = this.indexOf(character); 
    var last = this.lastIndexOf(character); 

    return first !== -1 && 
     first === last; 
}; 

'single-hyphen'.hasOne('-'); // true 
'a-double-hyphen'.hasOne('-'); // first !== last, false 
'nohyphen'.hasOne('-'); // first === -1, false 

http://jsfiddle.net/cSF8T/

+0

Java düzenli ifadeler sınırlayıcı bir karakter kullanmaz. – Tomalak

+0

@Tomalak: JavaScript Java değil. – Amadan

+0

Javascript olanlar – Dancrumb

2

Sen indexOf ve lastIndexOf bir arada kullanabilirsiniz. Dizeyi değiştirmez veya normal ifadeyi kullanmaz.

// only true if only one occurrence of - exists in string 
(str.indexOf("-") + 1) % (str.lastIndexOf("-") + 1) === 0 

Fiddle here

0

Sıradışı ama çalışır: