0

我正在尝试修复如何将用户名从 LMS(学习管理系统)拉入 HTML 页面。目前,名字和姓氏有两个单独的输入。用户想要添加他们的中间名,所以我们让他们将其添加到名字输入框中,如下所示:

名字:约翰·雷

姓名:Doe

我们将他们的名字拉入 HTML 页面的代码如下所示:

var strStudentName;

if (typeof opener != "undefined" && typeof opener.LMS_student_name != "undefined" && opener.LMS_student_name != null)
{
    strStudentName = opener.LMS_student_name;
}
else
{
    strStudentName = "the Student";
}

var objRegExp = /(\w+),(\w+)/;
var strReverseName = strStudentName.replace(objRegExp, "$2 $1");

不幸的是,这段代码最后显示了他们的中间名“John Doe Ray ”。我想把它读成“John Ray Doe”。如果我切换 $2 和 $1,它将显示“Doe John Ray ”无论我做什么,中间名总是最后!

这段代码的最初目的是把用户的名字放在第一位,因为 LMS 默认他们的名字是向后的,比如 (Doe, John)。

请帮忙!谢谢!!

4

3 回答 3

0

你需要升级你的正则表达式:

var objRegExp = /(\w+),((\w+)(\s\w+))*/;
于 2012-12-11T01:03:17.460 回答
0

根据您的输入数据,您可能不需要在第二个捕获组中指定单词字符 - 如果您的输入是独立的,那么/(\w+),(.+)/;将起作用。

但是,如果您在名称字符串后面有更多字符,我们将需要更多关于这些字符是什么的信息,以便正确指定正则表达式。

于 2012-12-11T01:04:26.130 回答
0

那是因为第二个(\w+)不会捕获空格和中间名。

var objRegExp = /(\w+),(\w+)(?:\s(\w+))?/;

$3会给你中间名。

于 2012-12-11T01:06:15.347 回答