在 javascript 中出现的前两个逗号处拆分字符串

Posted

技术标签:

【中文标题】在 javascript 中出现的前两个逗号处拆分字符串【英文标题】:Split a string at the first two commas occuring in javascript 【发布时间】:2020-02-24 09:01:03 【问题描述】:

让我们考虑一个变量 str 定义为:

var str = "A, B, C, D, E, F"

要以逗号分隔字符串,我这样做:

str = str.split(",")
console.log(str)
// => ["A", "B", "C", "D", "E", "F"]

那么,如果我必须在前两个逗号处拆分它,我应该怎么做,这样输出变成:

// => ["A", "B", "C, D, E, F"]

【问题讨论】:

【参考方案1】:

您可以使用正则表达式来匹配第一个非逗号部分,然后是第二个非逗号部分,然后是其他任何内容(字符串的其余部分):

var str = "A, B, C, D, E, F";
const [, ...matches] = str.match(/(\w+), (\w+), (.+)/);
console.log(matches);

您也可以使用split 和负向回看,但并非所有地方都支持负向回看(并且在极少数环境中支持可变长度回看):

var str = "A, B, C, D, E, F";
console.log(
  str.split(/(?<=^[^,]+(?:,[^,]+)?), /)
);

【讨论】:

我从来没有做过const [, ...matches] = str.match(...)。这比我通常用于解决该问题的技术要好得多!【参考方案2】:

您可以拆分字符串,保留拆分分隔符并构建一个新的部件数组和连接部件。

function split(string, limit) 
    var parts = string.split(/(,\s*)/),
        result = [],
        i = 0;
    
    while (i < limit * 2) 
        result.push(parts[i]);
        i += 2;
    
    result.push(parts.slice(limit * 2).join(''));
    return result;


console.log(split('A, B, C, D, E, F, G', 2));

【讨论】:

【参考方案3】:

你可以试试这个,它会返回你需要的结果

-var yourString="A, B, C, D, E, F";

-var formattedString = yourString.split(",").join("\n");

【讨论】:

【参考方案4】:

可以通过这种方式使用splitreduce来完成:

const str = 'A, B, C, D, E, F';

const res = str
  .split(', ')
  .reduce((strs, str) => 
    // get three parts of an array
    let [partOne, partTwo, partThree] = strs;
    // if the first two parts isn't fill out
    if (!partTwo) 
      return [...strs, str];
     else 
      // fill out the third part,
      // which can be 'undefined' at start.
      // if it is not 'undefined',
      // concatenate the string
      return partThree ? [partOne, partTwo, `$partThree, $str`] : [...strs, str];
        
  , [])
 console.log(res);

【讨论】:

以上是关于在 javascript 中出现的前两个逗号处拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

在特定字符处拆分字符串但忽略某些情况 C# LINQ

使用逗号拆分字符串,但忽略双引号内的逗号 - javascript

计算Javascript中字符串中字符的出现次数

在javascript中将单词拆分为音节

将逗号分隔的字符串拆分为数组?

如何在C#中将带逗号的字符串拆分为两个字符串[重复]