目前,在某些情况下我在匹配逗号时遇到问题。
例如
<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等浏览器
这是我的正则表达式代码。
(?<!\s*[=]\s*\d+)\,\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
答案 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)
您可以使用alternation和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);