Google Apps脚本正则表达式,以获取人的姓氏

use*_*683 8 regex google-apps-script

我正在尝试写一个正则表达式来获取一个人的姓氏.

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

如果我理解正确\s应该找到My和之间的空格Name,[a-z]||[A-Z]将得到下一个字母,然后*将得到其余的.如果有人能提供帮助,我将不胜感激.

acd*_*ior 17

您可以使用以下正则表达式:

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
Run Code Online (Sandbox Code Playgroud)

但是,根据您的要求,使用起来更简单.split():

var name = "John Smith";
var lastName = name.split(" ")[1];
Logger.log(lastName); // Smith
Run Code Online (Sandbox Code Playgroud)

或者.substring()(如果有多个"姓氏",则有用):

var name = "John Smith Smith";
var lastName = name.substring(name.indexOf(" ")+1, name.length); 
Logger.log(lastName); // Smith Smith
Run Code Online (Sandbox Code Playgroud)

  • `([az] +)`中的`()`实际上是[分组](http://www.regular-expressions.info/brackets.html).它允许我们稍后再次使用匹配的部分.`(?:)`(这里强制`()`意味着相反,不包括这个组,因此只需使用`()`作为常规`()`,用于将运算符应用于多个表达式(如在`(\ s\w)+`中,`(\ s\w)`将是一个组.在`(?:\ s\w)+`中它不是.).额外的`\`是必要的,因为你的正则表达式是使用`RegExp`构造函数声明的,它得到一个字符串作为参数.因此需要将`\`转义为`\\`.如果清楚的话请告诉我! (4认同)