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

时间:2019-05-16 02:26:02

标签: javascript regex negative-lookbehind

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

例如

<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_3product_11,product_12,product_13,product_14=20

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

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

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

https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-mvss-guest-based-autoscale-linux

还有其他选项可以匹配我期望的逗号吗?

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

所以输出将是

<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

2 个答案:

答案 0 :(得分:1)

即使这不是一个正则表达式,也可能是您需要的:

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

对于s:

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'

此表达式返回:

"<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"

答案 1 :(得分:0)

您可以使用alternationreplace的回调函数。

在轮换中,您可以匹配所需的内容和不需要的内容。在替换功能中,您可以检查匹配项是否为单个逗号并将其替换为正斜杠。

<[^<>]+>|=\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);