已使用正则后再次使用正则:如何正确获取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
相关产品推荐
相关产品推荐

