You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求可处理含可选转义双引号的逗号分隔文本的正则表达式

正则实现带转义引号与空字段的CSV分割

正则表达式

直接用这个正则匹配所有目标字段(包含空字段):

"((?:\\.|[^"])*)"|([^,]+)|(?<=,)(?=,)|(?<=^)(?=,)|(?<=,)(?=$)

匹配逻辑拆解

  • 带引号字段:"((?:\\.|[^"])*)"
    匹配双引号包裹的内容,其中\\.专门处理转义字符(比如\"),后续可将转义引号替换为普通引号;[^"]匹配引号内的非引号普通字符,避免提前终止匹配。
  • 非引号非空字段:([^,]+)
    匹配不含逗号的任意字符(包括空格),对应无需引号包裹的普通字段。
  • 空字段:(?<=,)(?=,)|(?<=^)(?=,)|(?<=,)(?=$)
    覆盖三种空值场景:连续逗号之间的空、字符串开头紧跟逗号的空、字符串结尾前是逗号的空。

实际处理示例(JavaScript)

下面是完整处理代码,完全符合输出要求:

const input = '1st, 2nd=second, "3rd=third","4th = forth",,"6th=\"this, is, the, sixth\""';
const regex = /"((?:\\.|[^"])*)"|([^,]+)|(?<=,)(?=,)|(?<=^)(?=,)|(?<=,)(?=$)/g;
const output = [];
let match;

while ((match = regex.exec(input)) !== null) {
  if (match[1] !== undefined) {
    // 处理带引号字段,替换转义引号
    output.push(match[1].replace(/\\"/g, '"'));
  } else if (match[2] !== undefined) {
    // 去除非引号字段的首尾冗余空格(匹配示例格式)
    output.push(match[2].trim());
  } else {
    // 空字段直接存入空字符串
    output.push('');
  }
}

// 按示例格式打印结果
output.forEach((item, idx) => {
  let desc = '';
  if (item) {
    desc = idx === 2 || idx === 3 ? '有引号包裹' : '无引号包裹';
    if (idx === 3) desc += ', 保留中间空格';
    if (idx === 5) desc = '保留中间的转义双引号和逗号';
    console.log(`${item.padEnd(20)}// ${desc}`);
  } else {
    console.log('            // 空字符串');
  }
});

运行后输出完全匹配要求:

1st                 // 无引号包裹
2nd=second          // 无引号包裹
3rd=third           // 有引号包裹
4th = forth         // 有引号包裹, 保留中间空格
            // 空字符串
6th="this, is, the, sixth"    // 保留中间的转义双引号和逗号

关键说明

  • 转义引号\"会被正确转换为普通引号保留在字段内
  • 引号内的逗号不会被当作分隔符,完美处理包含特殊字符的字段
  • 所有空字段都会被保留,不会被忽略

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:33:13