满足条件时正则表达式匹配逗号
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+,|,
例如:
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);
目前,我在某些条件下匹配逗号时遇到问题。
例如
<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+,|,
例如:
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);