2013-07-10 5 views
5

Sto provando a scrivere un'espressione regolare per ottenere il cognome di una persona.Espressione regolare di Google Apps Script per ottenere il cognome di una persona

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

Se ho capito bene \s dovrebbe trovare lo spazio vuoto tra My e Name, [a-z]||[A-Z] otterrebbe la lettera successiva, poi * otterrebbe il resto. Gradirei un consiglio se qualcuno potesse dare una mano.

risposta

12

È possibile utilizzare la seguente espressione regolare:

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 

Ma, dalle vostre esigenze, è più semplice utilizzare solo .split():

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

O .substring() (utile se ci sono più di uno " cognomi "):

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

Grazie per le alternative. Molto utile. Solo una breve domanda sulla regex. Se capisco bene: () parentesi significa valutare questo primo ?: Significa non registrare nella regex \ s è lo spazio bianco Qual è lo scopo del extra "\"? – user1682683

+3

Il '()' in '([a-z] +)' è in realtà per [raggruppamento] (http://www.regular-expressions.info/brackets.html). Ci consente di utilizzare nuovamente quella parte abbinata in seguito. '(? :)' (il '()' è obbligatorio qui) significa il contrario, non includere questo gruppo, quindi usa semplicemente '()' come regolare '()', utile per applicare gli operatori a più espressioni (come in '(\ s \ w) +', '(\ s \ w)' sarebbe un gruppo. In '(?: \ s \ w) +' non lo è.). L'extra '\' è necessario perché la tua regex è stata dichiarata usando il costruttore 'RegExp', e ottiene una stringa come parametro. Quindi la necessità di sfuggire '\' come '\\'. Fammi sapere se è chiaro! – acdcjunior

Problemi correlati