2013-07-10 8 views
5

मैं किसी व्यक्ति का अंतिम नाम प्राप्त करने के लिए एक रेगेक्स लिखने की कोशिश कर रहा हूं।Google Apps स्क्रिप्ट नियमित अभिव्यक्ति किसी व्यक्ति का अंतिम नाम

var name = "My Name"; 
var regExp = new RegExp("\s[a-z]||[A-Z]*"); 
var lastName = regExp(name); 
Logger.log(lastName); 

तो मैं समझता हूँ कि सही ढंग से \sMy और Name के बीच सफेद स्थान खोजना चाहिए, [a-z]||[A-Z] अगले पत्र मिलेगा, तो * आराम मिलेगा। अगर कोई मदद कर सकता है तो मैं एक टिप की सराहना करता हूं।

उत्तर

12

आप निम्न regex का उपयोग कर सकते हैं:

var name = "John Smith"; 
var regExp = new RegExp("(?:\\s)([a-z]+)", "gi"); // "i" is for case insensitive 
var lastName = regExp.exec(name)[1]; 
Logger.log(lastName); // Smith 

लेकिन, अपनी आवश्यकताओं से, यह सिर्फ उपयोग करने के लिए आसान है .split():

var name = "John Smith"; 
var lastName = name.split(" ")[1]; 
Logger.log(lastName); // Smith 

या .substring() (उपयोगी वहाँ एक से अधिक कर रहे हैं " अंतिम नाम "):

var name = "John Smith Smith"; 
var lastName = name.substring(name.indexOf(" ")+1, name.length); 
Logger.log(lastName); // Smith Smith 
+0

विकल्पों के लिए धन्यवाद। बहुत उपयोगी। रेगेक्स के बारे में बस एक त्वरित सवाल। अगर मैं इसे सही समझता हूं: () ब्रैकेट का मतलब इस पहले का मूल्यांकन करना है?: मतलब है कि रेगेक्स \ s में सफेद रिकॉर्ड अतिरिक्त "\" का उद्देश्य क्या है? – user1682683

+3

'()' '' ([a-z] +) 'वास्तव में [समूह] के लिए है (http://www.regular-expressions.info/brackets.html)। यह हमें बाद में उस मिलान किए गए हिस्से का उपयोग करने की अनुमति देता है। '(? :)' ('()' यहां अनिवार्य है) इसका मतलब है, इस समूह को शामिल न करें, इस प्रकार केवल '() 'नियमित रूप से'() 'के रूप में उपयोग करें, ऑपरेटरों को एकाधिक अभिव्यक्तियों (जैसे कि '(\ s \ w) +', '(\ s \ w) 'में एक समूह होगा।' (?: \ s \ w) +' यह नहीं है।)। अतिरिक्त '\' आवश्यक है क्योंकि आपका रेगेक्स 'RegExp' कन्स्ट्रक्टर का उपयोग करके घोषित किया गया था, और यह पैरामीटर के रूप में एक स्ट्रिंग प्राप्त करता है। इस प्रकार '\' के रूप में '\\' से बचने की आवश्यकता। अगर यह स्पष्ट है तो मुझे बताएं! – acdcjunior

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