2013-07-10 20 views
5

Próbuję napisać wyrażenie regularne, aby uzyskać nazwisko osoby.Google Apps Script Regular Expression, aby uzyskać nazwisko osoby

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

Jeśli dobrze rozumiem \s powinien znaleźć białą przestrzeń pomiędzy My i Name, [a-z]||[A-Z] dostanie następną literę, następnie * dostanie resztę. Byłbym wdzięczny za wskazówkę, jeśli ktoś mógłby pomóc.

Odpowiedz

12

Można użyć następującego wyrażenia regularnego:

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 

Ale ze swoimi wymaganiami, łatwiej jest po prostu użyć .split():

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

Albo .substring() (przydatne, gdy istnieje więcej niż jeden " nazwiska "):

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

Dzięki za alternatywy. Bardzo pomocne. Krótkie pytanie na temat regex. Jeśli rozumiem to dobrze: () nawiasy oznaczają najpierw tę ocenę ?: oznacza, że ​​nie rejestruje się w regex \ s to biała przestrzeń Jaki jest cel dodatkowego "\"? – user1682683

+3

'()' in '([a-z] +)' jest właściwie dla [grupowania] (http://www.regular-expressions.info/brackets.html). Pozwala nam to ponownie wykorzystać tę dopasowaną część później. '(? :)' (''() 'są obowiązkowe tutaj) oznacza przeciwieństwo, nie włączaj tej grupy, a zatem po prostu użyj'() 'jako zwykłego'() ', przydatnego do zastosowania operatorów do wielu wyrażeń (np. w '(\ s \ w) +', '(\ s \ w)' byłaby grupą. W '(?: \ s \ w) +' nie jest.). Dodatkowe '\' jest konieczne, ponieważ twoje wyrażenie regularne zostało zadeklarowane przy użyciu konstruktora 'RegExp', i pobiera ciąg jako parametr. Tak więc potrzeba ucieczki od '\' jako '\\'. Daj mi znać, jeśli to jasne! – acdcjunior

Powiązane problemy