Регулярное выражение соответствует запятой, когда условие выполнено - PullRequest
2 голосов
/ 16 мая 2019

В настоящее время у меня есть проблема с сопоставлением запятой в некоторых условиях.

например

<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?(?![^\<]*\>)

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

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Даже если это не одно регулярное выражение, это может быть то, что вам нужно:

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"

1010 *

0 голосов
/ 16 мая 2019

Вы можете использовать чередование и функцию обратного вызова для 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);
...