1. ホーム
  2. javascript

[解決済み] 条件を満たしたときにカンマをマッチさせるREGEX

2022-02-25 03:34:04

質問

現在、いくつかの条件においてカンマのマッチングに問題があります。

例えば

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

解決方法は?

を使用することができます。 オルタネート のコールバック関数と 置換 .

alternationでは、必要なものと不要なものをマッチングさせることができます。置換機能では、マッチしたものが単一のカンマであるかどうかをチェックし、それをフォワードスラッシュに置き換えることができます。

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

Regexデモ

例えば

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);