如何保留换行符拆分字符串并转换为指定格式二维数组?
带换行符的分号分隔字符串转指定二维数组解决方案
需求说明
以分号为分隔符将字符串转换为二维数组,数组每个元素格式为 [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
相关产品推荐
相关产品推荐

