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

如何保留换行符拆分字符串并转换为指定格式二维数组?

带换行符的分号分隔字符串转指定二维数组解决方案

需求说明

以分号为分隔符将字符串转换为二维数组,数组每个元素格式为 [int, 可能包含空格开头、换行符的字符串]。

示例输入

var str = "2;poisson
            poisson
           3; Fromage
           6;Monique"

期望输出

var arr = [[2, "poisson
               poisson"],
          [3," Fromage"],
          [6,"Monique"]]

问题分析

你尝试的正则表达式 (\d+\;\s?)(.)+ 无法捕获换行符内容,原因是:

  • 默认情况下,正则中的 . 不匹配换行符;
  • 贪婪量词 + 会一次性匹配到字符串末尾,无法正确分割每个条目。

解决方法

使用支持匹配所有字符(包括换行)的正则,配合非贪婪模式和正向预查来精准分割每个条目:

正则表达式

/(\d+);([\s\S]*?)(?=\d+;|$)/g

各部分解释:

  • (\d+):捕获作为数组第一个元素的数字;
  • ;:匹配分隔用的分号;
  • ([\s\S]*?):非贪婪匹配所有字符(\s 匹配空白符含换行,\S 匹配非空白符,合起来覆盖所有字符),捕获作为数组第二个元素的字符串;
  • (?=\d+;|$):正向预查,确保匹配截止到下一个 数字+分号 的起始位置,或者字符串末尾。

JavaScript 实现代码

const str = "2;poisson\n            poisson\n           3; Fromage\n           6;Monique";
const regex = /(\d+);([\s\S]*?)(?=\d+;|$)/g;
const arr = [];
let match;

while ((match = regex.exec(str)) !== null) {
  // 转换数字部分为int,保留字符串的原始格式(含换行和开头空格)
  arr.push([parseInt(match[1], 10), match[2]]);
}

console.log(arr);

运行后即可得到符合期望的二维数组,字符串中的换行和开头空格都会被完整保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:00:58