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

已使用正则后再次使用正则:如何正确获取id与name的值?

正确提取id与name值的方案

原代码存在的问题

  • 最后一行id.match(...)会报错:data.match()返回的是匹配结果数组(如["3"]),数组没有match方法,不能直接调用。
  • 提取name的正则[\w|-]*使用*可能匹配空字符串,改为+更稳妥,确保捕获到有效内容。
  • 正向预查(?<=)在部分旧版浏览器中存在兼容性问题。

方案1:优化正则提取(兼容版)

使用捕获组替代lookbehind,同时处理匹配结果的取值:

let data = "[[id=3, name=BOX-3, description=test, comment=test, locationId=5, capacity=null]];";

// 提取id:用捕获组捕获=后的数字
const idMatch = data.match(/id=(\d+)/);
const id = idMatch ? idMatch[1] : null;

// 提取name:捕获=后的字母、数字、连字符组合
const nameMatch = data.match(/name=([\w-]+)/);
const name = nameMatch ? nameMatch[1] : null;

console.log(id); // 输出 "3"
console.log(name); // 输出 "BOX-3"

方案2:转换为键值对对象(更灵活)

如果需要提取多个字段,或者字段顺序可能变化,先将字符串转换为对象更健壮:

let data = "[[id=3, name=BOX-3, description=test, comment=test, locationId=5, capacity=null]];";

// 清理外层的[[、]]和末尾的分号
const cleanedData = data.replace(/^\[\[|\]\];$/g, '');
// 分割为键值对数组
const keyValuePairs = cleanedData.split(/,\s+/);
// 构建对象
const dataObj = {};
keyValuePairs.forEach(pair => {
  const [key, value] = pair.split('=');
  dataObj[key] = value;
});

// 直接从对象中取值
const id = dataObj.id;
const name = dataObj.name;

console.log(id); // 输出 "3"
console.log(name); // 输出 "BOX-3"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:48:18