首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Javascript中的字符串中添加逗号

如何在Javascript中的字符串中添加逗号
EN

Stack Overflow用户
提问于 2020-10-22 21:27:07
回答 3查看 588关注 0票数 1

我试图在括号中的名字和姓氏之间添加逗号。

代码语言:javascript
复制
//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)"

我的代码是当前输出:

代码语言:javascript
复制
(CORWILL ALFRED) (CORWILL FRED) (CORWILL RAPHAEL) (CORWILL WILFRED) (TORNBULL BARNEY) (TORNBULL BETTY) (TORNBULL BJON)

我尝试过许多方法,比如在重新分配s(字符串)时,首先更改字符的替换方式,这样我一开始就不会删除逗号,然后必须替换them...but,当我这样做时,我的正则表达式就不再起作用了,我不知道为什么会这样。所以我试着找另一个正则表达式,这样我就可以解决这个问题,但这同样是一个痛苦,所以我决定坚持用这样的方法来解决:试图找到一种方法,在括号中的第一个和姓氏之间找到逗号。

完整问题和代码:

代码语言:javascript
复制
/*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)"

任何帮助都将不胜感激,我在这个problem.The正则表达式上花费了大约5个小时,我使用的是用名字的位置切换姓氏的位置( Fred ) --> ( Corwill )。如果有一个regex给我,而不是你建议的那个,也许我也可以用这种方式解决这个问题,到目前为止,我尝试过的其他方法都没有奏效。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-22 21:33:02

这看起来比需要的复杂得多。在被;s拆分后,将每个单独的元素按相反顺序映射到其单词,然后连接:

代码语言:javascript
复制
const s = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill";

const output = s
  .toUpperCase()
  .split(';')
  .sort((a, b) => {
    const [aFirst, aLast] = a.split(':');
    const [bFirst, bLast] = b.split(':');
    return aLast.localeCompare(bLast) ||  aFirst.localeCompare(bFirst);
  })
  .map((name) => {
    const [first, last] = name.split(':');
    return `(${last}, ${first})`;
  })
  .join('');
console.log(output);

票数 0
EN

Stack Overflow用户

发布于 2020-10-22 21:30:58

与映射和排序一起使用拆分

代码语言:javascript
复制
var s = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill";

var res = s.split(/;/) // split into people
  .map(x => x.split(/:/).reverse()) // split names, put last first
  .sort((a, b) => a[0] === b[0] ? a[1].localeCompare(b[1]) : a[0].localeCompare(b[0])) // sort by last name, first name
  .map(x => `(${x.join(', ')})`) // create the new format
  .join(' ') // join the array back into a string
console.log(res);

票数 0
EN

Stack Overflow用户

发布于 2020-10-22 22:28:08

这就是你需要的:

代码语言:javascript
复制
const str = 'Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill';

function formatString(string) {
  const modifiedString = string.toUpperCase().replace(/(\w+):(\w+)/g, '($2, $1)');
  const sortedString = modifiedString.split(';').sort().join('');
  
  return sortedString;
}

console.log(formatString(str))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64490780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档