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

正则分组匹配code/price/name/status时无状态行如何设置默认status为Y

正则修改方案

问题原因

原正则末尾的\[(?<status>X|Y)\]是强制匹配项,不带状态标识的行无法命中,因此匹配失败。

修改后的正则

/^(?<code>[^=]+)=(?<price>\d{1,3}\.?\d{0,3})(?<name>.*?)\s*(?:\[(?<status>[XY])\])?;?$/gm

修改点说明

  • 给状态分组外层的非捕获组添加?标记为可选匹配,没有[X]/[Y]的行也能正常命中
  • 优化各分组的匹配规则,避免贪婪匹配导致内容错位:
    • 用[^=]+替代原.*匹配code,精准定位到等号前的所有内容
    • 用非贪婪匹配.*?匹配name,不会吞掉后续的状态标识
    • 添加行首^、行尾$锚定和gm匹配模式,逐行匹配有效内容,自动过滤样例中无意义的首行Harga:

配套处理逻辑

JS正则中未命中的命名分组会返回undefined,匹配后加一行逻辑设置默认值即可:

const text = `Harga: 
X25=2.335NAME1 25 [X];
X1=5.720NAME2 5 [Y];
X2=10.720NAME3 10 [Y];
X4=4.200NAME4 4;`;

const reg = /^(?<code>[^=]+)=(?<price>\d{1,3}\.?\d{0,3})(?<name>.*?)\s*(?:\[(?<status>[XY])\])?;?$/gm;
const res = [];

for(const match of text.matchAll(reg)){
  const item = {...match.groups};
  item.status = item.status ?? 'Y'; // 无状态时默认设为Y
  res.push(item);
}

console.log(res);

运行结果

[
  { code: 'X25', price: '2.335', name: 'NAME1 25', status: 'X' },
  { code: 'X1', price: '5.720', name: 'NAME2 5', status: 'Y' },
  { code: 'X2', price: '10.720', name: 'NAME3 10', status: 'Y' },
  { code: 'X4', price: '4.200', name: 'NAME4 4', status: 'Y' }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:45:04