【发布时间】:2020-10-22 21:27:07
【问题描述】:
我正在尝试在括号中的名字和姓氏之间添加逗号。
//Input:
s = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill";
//Expected output: "(CORWILL, ALFRED)(CORWILL, FRED)(CORWILL, RAPHAEL)(CORWILL, WILFRED)(TORNBULL, BARNEY)(TORNBULL, BETTY)(TORNBULL, BJON)"
我的代码当前输出的是什么:
(CORWILL ALFRED) (CORWILL FRED) (CORWILL RAPHAEL) (CORWILL WILFRED) (TORNBULL BARNEY) (TORNBULL BETTY) (TORNBULL BJON)
我尝试了多种方法,例如在重新分配 s(字符串)时更改字符在开头的替换方式,这样我就不会首先删除逗号,然后必须替换它们.. .但是当我这样做时,我拥有的正则表达式不再工作,我不知道为什么会这样。所以我试图找到另一个正则表达式来使用,这样我就可以解决这个问题,但这同样是一个痛苦,所以我决定坚持以这种方式解决它:试图找到一种在第一个之间找到逗号的方法,和括号中的姓氏。
完整问题和代码:
/*Could you make a program that
• makes this string uppercase
• gives it sorted in alphabetical order by last name.
When the last names are the same, sort them by first name. Last name and first name of a guest come in the result between parentheses separated by a comma.
*/
function meeting(s) {
s = s.replace(/:/g, ", ").toUpperCase();
//order alphabetically based on Last, then first name
const semicolon = ';'
let testArr = s.split(semicolon)
testArr.sort(function compare(a, b) {
var splitA = a.split(",");
var splitB = b.split(",");
var firstA = splitA[0]
var firstB = splitB[0]
var lastA = splitA[splitA.length - 1];
var lastB = splitB[splitB.length - 1];
if (lastA < lastB) return -1;
if (lastA > lastB) return 1;
if (firstA < firstB) return -1; //sort first names alphabetically
if (firstA > firstB) return 1;
return 0; //if they are equal
})
//print last names before first names with regex
let newArr = [];
for (let i = 0; i < testArr.length; i++) {
let variable = (testArr[i].replace(/([\w ]+), ([\w ]+)/g, "$2 $1"))
let comma = ","
newArr.push(`(${variable})`)
}
let finalStr;
finalStr = newArr.toString().replace(/[ ,.]/g, " ").toUpperCase();
// finalStr = finalStr.replace(/" "/g, ", ")
return finalStr
}
s = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill";
console.log(meeting(s))
// expected result: "(CORWILL, ALFRED)(CORWILL, FRED)(CORWILL, RAPHAEL)(CORWILL, WILFRED)(TORNBULL, BARNEY)(TORNBULL, BETTY)(TORNBULL, BJON)"
任何帮助将不胜感激,我在这个问题上花了大约 5 个小时。我使用的正则表达式是用名字的位置(Fred Corwill)->(Corwill Fred)切换姓氏的位置。如果有一个 regex 对我来说不是你可以建议的我正在使用的那个,也许我也可以通过这种方式解决这个问题,到目前为止我所尝试的一切都没有工作我在这里使用的一个。
【问题讨论】:
-
您根本不需要正则表达式。您可以使用
split()调用和字符串连接来完成所有操作。 -
我可以使用 split() 来切换姓氏的位置和名字的位置吗? (弗雷德·科威尔)-->(科威尔·弗雷德)
-
你知道,有些人不会只有两个名字
-
是的,当然,这是一个很好的观点,但是对于这个问题,我只需要担心。
标签: javascript regex