在给定的字符串中,我想将字符串中单词末尾的所有逗号移动到它们所附加的单词之前的单词的末尾。 前:"不久之后,猫说了,快走!"会读到:"很快,猫说,让我们走!" 有什么建议吗?
答案 0 :(得分:0)
使用regex捕获组和String.replace可以轻松解决此问题。 String.replace
的参数是前面提到的正则表达式和回调函数,其第二,第三和第四个参数是捕获的组:
let str = "sometime soon the, cat said let's, go!";
let result = str.replace(/(\s)(\S+)(,)/g, (match, whitespace, word, comma) =>
comma + whitespace + word
);
console.log(result); // "sometime soon, the cat said, let's go!"
我建议将来咨询Mozilla MDN以获取此类问题,因为它是一个包含许多优秀示例和最佳实践的宝贵资源。
答案 1 :(得分:0)
编辑:编辑了问题,这是对其先前版本的回答。 le_m的答案是一个很好的答案,我建议使用它。
-
编辑:我想我会在这里添加一些关于我选择做什么的背景。
Javascript中的字符串是不可变的,这意味着它们无法更改,但我们可以设法根据需要创建它们的副本。然后,如果我们愿意,我们可以分配新值并覆盖旧变量。
由于我不一定以“正则表达式”思考,我发现将字符串转换为数组最简单,使用split(''),并使用功能映射映射每个单词。为了映射,我传递了一个箭头函数,负责评估每个单词。一旦我完成了我的阵列,我就把它连接成一个字符串。
let sentence = 'again, the cat said, let's go!'
let result = sentence.split(' ').map((word) => word[word.length -1] == ',' ? ','+word.substring(0,word.length -1) : word).join(' ')
答案 2 :(得分:0)
执行此操作的一种方法是使用RegExp和string.replace()
:
str.replace(/(\w*)(,)/g, '$2$1');
这样做的目的是捕获一行单词字符\w*
,这两个字符由两个独立的捕获组中的逗号继续。第二个参数实际上允许我们引用这些捕获组,我们应该用!