2011-02-18 15 views
16

मैं निम्नलिखित स्ट्रिंग है:एक स्ट्रिंग से पहला शब्द निकालने - regex


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

यहां मुद्दा यह शब्द/नहीं हो सकता है हो सकता है "-" यह

में regex का उपयोग करना: कैसे क्या मैं पहला शब्द निकाल सकता हूं?

इस पर कोई मदद की सराहना करें।

धन्यवाद, एल

+0

यह पहली करने के लिए सभी से मेल खाता है अल्पविराम:^[^,] + –

+0

यही मैंने कोशिश की (और काम करता है!) और उम्मीद है कि यह सही है: अलर्ट (str.replace (/^([^,]+)(.*)?/, "$ 1 ")); – lshettyl

+0

यदि यह वास्तव में आप करना चाहते हैं, तो यह भी काम करेगा: चेतावनी (str.substring (0, str.indexOf (',')) –

उत्तर

35

यह बहुत आसान है, बस स्वीकृत वर्णों कोष्ठक में शामिल है:

^([\w\-]+)

+1

^([\ w -] +) या^[\ w -] + –

+1

उन्होंने निकाला, इसलिए मुझे लगता है कि इसे कोष्ठक की आवश्यकता है। –

+0

मैं यहां नया हूं, इसलिए मुझे कुछ याद आ रहा है, लेकिन मैंने इसका परीक्षण करने के लिए आपके (अस्थायी?) उत्तर से "^ ([\ w -]) +" की प्रतिलिपि बनाई है। –

1

एक दृष्टिकोण एक regex का उपयोग नहीं: पहला शब्द संभालने एक अल्पविराम से हमेशा सीमांकित किया जाता है " , "आप यह कर सकते हैं:

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

संपादित करें: ग्रहण वें कुछ कारणों से जावास्क्रिप्ट प्रश्न था।

+1

रेगेक्स वास्तव में इस बार आसान है, मुझे लगता है। :) उसने यह भी नहीं कहा कि वह जावास्क्रिप्ट का उपयोग कर रहा था। –

+1

@ सेठ: हाँ, आप सही हैं। डुनो क्यों मैंने सोचा था जेएस था। शायद क्योंकि कोई प्रकार की परिभाषा नहीं है? –

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 
    } 
} 

इसका इस्तेमाल करने के लिए बस लिखें:

myString.firstWord() 
+0

इस मामले में रिचर्ड एच का प्रत्यक्ष नियमित अभिव्यक्ति से बचने का उत्तर शायद सबसे अच्छा है और बस इस स्विफ्ट अभिव्यक्ति का उपयोग करें; str.componentsSeparatedByString (",") [0] –

+0

वास्तव में आप सही हैं। लेकिन यदि आप जेनेरिक के लिए कुछ ढूंढ रहे हैं तो मैं हार्ड-कोडेड "," समाधानों का उपयोग करने से बचूंगा। शायद अगली बार विभाजक "_", "-", "।" आदि हो सकता है। –

संबंधित मुद्दे