满足条件时正则表达式匹配逗号

Regex match comma when condition is met

目前,我在某些条件下匹配逗号时遇到问题。

例如

<product_11,product_12>=5,product_1,product_2,product_3=1,product_9=3,<product_5,product_6>=10,product_11,product_12,product_13,product_14=20

我不想在=\d+<>里面匹配那个逗号,所以,在这种情况下,我要匹配的逗号只来自product_1,product_2,product_3 ] 和 product_11,product_12,product_13,product_14=20.

实际上,我已经完成了代码并且工作正常,但据我所知,该代码仅适用于 ECMAScript 2018 兼容环境,不支持 Mozilla 等浏览器,ie 等

这是我的正则表达式代码。

(?<!\s*[=]\s*\d+)\,\s?(?![^\<]*\>)

https://regex101.com/r/lS5tT3/231

是否有任何其他选项可以匹配我期望的逗号?

我想将匹配的逗号替换为 /

所以输出将是

<product_11,product_12>=5,product_1/product_2/product_3=1,product_9=3,<product_5,product_6>=10,product_11/product_12/product_13/product_14=20

尽管这不是一个单一的正则表达式,但这可能正是您所需要的:

s.replace(/(<[^>]*>)/g,'\n\n')
 .split('\n')
 .map(x=> /</.test(x)?x:x.replace(/(_\d+),/g,"/"))
 .join('')

对于小号:

s = '<product_11,product_12>=5,product_1,product_2,product_3=1,product_9=3,<product_5,product_6>=10,product_11,product_12,product_13,product_14=20'

这个表达式returns:

"<product_11,product_12>=5,product_1/product_2/product_3=1,product_9=3,<product_5,product_6>=10,product_11/product_12/product_13/product_14=20"

您可以使用 alternation and a callback function for replace

在交替中你可以匹配你想要的和你不想要的。在替换函数中,您可以检查匹配项是否为单个逗号并将其替换为正斜杠。

<[^<>]+>|=\d+,|,

Regex demo

例如:

let pattern = /<[^<>]+>|=\d+,|,/g;
let str = `<product_11,product_12>=5,product_1,product_2,product_3=1,product_9=3,<product_5,product_6>=10,product_11,product_12,product_13,product_14=20`;
str = str.replace(pattern, function($m) {
  return $m === "," ? '/' : $m;
});
console.log(str);