2013-07-10 16 views
5

人の姓を取得する正規表現を作成しようとしています。Google Apps Script正規表現で人の姓を取得する

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

私が正しく理解していれば\sは、*が休みになるだろう、[a-z]||[A-Z]は、次の文字になるだろう、MyName間の空白を見つける必要があります。もし誰かが助けてくれたら、私はヒントをいただきたいと思います。

答えて

12

次の正規表現を使用することができます

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)'はグループになります。あなたの正規表現が 'RegExp'コンストラクタを使って宣言され、パラメータとして文字列を取得するので、余分な' \ 'が必要です。したがって、 '\'を '\\'としてエスケープする必要があります。それが明らかであれば教えてください! – acdcjunior

関連する問題