2011-02-18 23 views
16
Ben aşağıdaki dizeyi var

:bir dize ilk kelimeyi ayıklamak - regex


str1 = "cat-one,cat2,cat-3"; 
OR 
str1 = "catone,cat-2,cat3"; 
OR 
str1 = "catone"; 
OR 
str1 = "cat-one"; 

burada nokta kelimeler/olabilir veya olmayabilir olduğunu "-" o

s regex kullanarak: nasıl 1. kelimeyi çıkarabilir miyim?

Bu konuda herhangi bir yardım için teşekkür ederiz.

sayesinde Bu sadece parantez içinde izin karakterler oldukça kolay bulunur oluyor

+0

Bu ilk kadar tüm karakterleri ile eşleşen virgül:^[^,] + –

+0

Denediğim şey buydu (ve işe yarıyor!) ve bunun doğru olduğunu umuyorum: alert (str.replace (/^([^,]+)(.*)?/, "$ 1 ")); – lshettyl

+0

Gerçekten yapmak istediğiniz tüm bu, bu da iyi çalışır: alert (str.substring (0, str.indexOf (','))) –

cevap

35

L:

^([\w\-]+)

+1

^([\ w -] +) veya^[\ w -] + –

+1

Özü söyledi, dolayısıyla parantezlere ihtiyaç duyduğunu farz ettim. –

+0

Burada yeniyim, bu yüzden bir şeyleri kaçırıyor olabilirim, ama "^ ([\ w -]) +" (geçici?) Cevabınızdan test etmek için kopyaladım. –

1
bir normal ifade kullanmayan bir yaklaşım

: İlk sözcüğü varsayarak virgülle hep sınırlanan " " Eğer bunu yapabilirsiniz:

var str1 = "cat-one"; 
var i = str1.indexOf(","); 
var firstTerm = i == -1 ? str1 : str1.substring(0, i); 

Düzenleme: varsayılan etki th bir sebepten dolayı javascript sorusuydu. Birisi, bir gün burada bir uzantısı ile gitmek Swift bunu yapmak isterseniz

+1

regex aslında bu sefer daha kolay, bence. :) Ayrıca javascript kullandığını söylemedi. –

+1

@Seth: evet, haklısın. Dunno neden js olduğunu düşündüm. Belki de tip tanımı yok mu? –

0

:

extension String { 

    func firstWord() -> String? { 
     var error : NSError? 
     let internalExpression = NSRegularExpression(pattern: "^[a-zA-Z0-9]*", options: .CaseInsensitive, error: &error)! 
     let matches = internalExpression.matchesInString(self, options: nil, range:NSMakeRange(0, countElements(self))) 
     if (matches.count > 0) { 
      let range = (matches[0] as NSTextCheckingResult).range 
      return (self as NSString).substringWithRange(range) 
     } 
     return nil 
    } 
} 

Kullanmak için sadece yazın:

myString.firstWord() 
+0

Bu durumda Richard H'nin doğrudan düzenli ifadeden kaçınmanın cevabı muhtemelen en iyisidir ve sadece bu Swift ifadesini kullanın; str.componentsSeparatedByString (",") [0] –

+0

Gerçekten de haklısınız. Ama eğer jenerik için bir şey arıyorsanız o zaman kodlanmış “,” çözümleri kullanmaktan kaçınırdım. Belki bir dahaki sefere ayırıcı "_", "-", "." Vb. Olabilir. –