var names = "John Keynes
             Carl Gauss
             Paul Feyerabend
             Antoine Lavoisier"


输出结果应为:

"John Keynes","Carl Gauss","Paul Feyerabend","Antoine Lavoisier"

最佳答案

只需捕获每两个单词并匹配以下一个或多个空格即可。然后将整个匹配项替换为$1,

> var names = "John Keynes Carl Gauss Paul Feyerabend Antoine Lavoisier";
undefined
> names.replace(/(\S+\s+\S+)\s+/g, "$1,")
'John Keynes,Carl Gauss,Paul Feyerabend,Antoine Lavoisier'


\S+匹配一个或多个非空格字符,其中\s+的作用与\S+的相反,后者匹配一个或多个空格字符。 (..)称为捕获组用于捕获与捕获组内存在的模式匹配的那些字符。稍后,我们可以通过在替换部分上指定组索引号来引用这些字符。

要将名称括在双引号中,您需要添加另一个replace函数。

> names.replace(/(\S+\s+\S+)\s+/g, "$1,").replace(/([^,\s]+\s+[^,\s]+)/g, '"$1"')
'"John Keynes","Carl Gauss","Paul Feyerabend","Antoine Lavoisier"'

07-24 17:43