如何用正则提取等号后的内容并保留数据类型信息?
提取等号后内容并保留类型的解决方案
需求与问题
- 输入字符串:
"Input: m = 2, n = 3, indices = [[0,1],[1,1]]" - 期望输出:
[2, 3, [[0, 1], [1, 1]]](需保留数值、数组的原生类型)
尝试用正则eachEx.match(/= (.+)/)[1]时,会匹配到整段后续内容2, n = 3, indices = [[0,1],[1,1]],无法拆分出单个等号后的值;直接拆分字符串则会丢失数值、数组的类型信息,只能得到字符串。
可行解决方案
使用支持全局匹配的正则捕获每个等号后的有效值,再通过JSON.parse自动解析为对应类型:
代码示例
const inputStr = "Input: m = 2, n = 3, indices = [[0,1],[1,1]]"; // 匹配所有等号后的值(兼容数字、数组格式) const matchIterator = inputStr.matchAll(/=\s*([\d\[\],]+)/g); // 转换为数组并解析每个值的类型 const result = Array.from(matchIterator, item => JSON.parse(item[1])); console.log(result); // 输出:[2, 3, [[0, 1], [1, 1]]] console.log(typeof result[0]); // number console.log(Array.isArray(result[2])); // true
说明
- 正则逻辑:
/=\s*([\d\[\],]+)/g=\s*:匹配等号及后续任意数量的空白字符([\d\[\],]+):捕获由数字、方括号、逗号组成的内容,刚好覆盖题目中的值类型g标志:开启全局匹配,获取所有等号后的结果
- 类型保留:
JSON.parse会自动将捕获的字符串解析为对应的数值或数组,无需手动转换类型 - 扩展兼容:如果后续需要支持带引号的字符串值,可将正则调整为
/=\s*(["\d\[\],]+)/g,同样通过JSON.parse解析即可
内容的提问来源于stack exchange,提问作者Emm
相关产品推荐
相关产品推荐

