Как сопоставить повторяющиеся последовательности с помощью регулярных выражений JavaScript - PullRequest
0 голосов
/ 09 января 2019

Я хочу использовать функцию javascript replace () и регулярное выражение для замены частей строки.

У меня есть строка, похожая на эту

(x=(1.22|2|3) && za=(hello|world|there|wow)||yy=(2|3))

Конечная цель - превратить его в следующее, используя javascript

(x=1.22|2|3 && za=hello|world|there|wow||yy=2|3)

Я пытаюсь использовать метод replace () с регулярным выражением и группой захвата. То, где я застреваю, является регулярным выражением. Я могу захватить something=, который я использую (\w+=) для захвата. Но я не мог понять, как захватить содержимое в скобках

1.22|2|3
hello|world|there|wow
2|3

Значения, ограниченные |, могут быть строковыми, целыми или десятичными. Я пробовал такие вещи, как -

/(\w*\.?\w+\|\w*\.?\w+)/g
Но это только захватило бы группы «чего-то | чего-то». Таким образом, для `1.22 | 2 | 3` будет записываться только` 1.22 | 2`. Я пробовал разные варианты этого регулярного выражения и не мог понять, как захватить весь разделенный `|` контент.

Большое спасибо заранее.

1 Ответ

0 голосов
/ 09 января 2019

Вы можете использовать

s = s.replace(/(\w=)\(([^()]+)\)/g, "$1$2");

Детали

  • (\w=) - Группа 1: слово char и a =
  • \( - ( char
  • ([^()]+) - Группа 2: один или несколько символов, отличных от ( и )
  • \) - ) char.

См. Демонстрационную версию regex .

Или, если в скобках должен быть символ "труба", используйте

s = s.replace(/(\w=)\(([^()|]+(?:\|[^()|]+)+)\)/g, "$1$2");

См. еще одну демонстрацию регулярных выражений . Здесь шаблон группы 2 отличается от первого шаблона:

  • [^()|]+ - 1 или более символов, отличных от (, ) и |
  • (?:\|[^()|]+)+ - 1 или более повторений
    • \| - трубный обугливатель
    • [^()|]+ - 1 или более символов, отличных от (, ) и |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...