Regex - соответствие каждой запятой НЕ между разделителями - PullRequest
3 голосов
/ 14 июля 2020

Кажется, это частый вопрос здесь, в StackOverflow, но я не мог заставить его работать должным образом. Приносим извинения за неудобства.

Мне нужно разделить строку для каждой запятой, обнаруженной за пределами группы, разделенной парами знаков доллара. Я использую Javascript.

Ожидаемое поведение: "$g=9,8m/s$, p,q, $m=19,0$, banana"

Должно возвращать ["$g=9,8m/s$", "p", "q", "$m=19,0$", "banana"]

В идеале знаки доллара с префиксом \ следует игнорировать следующим образом:

"$$g=9,8m/s$$, p,q, $price=\$19,0$, banana"

Возвращает ["$$g=9,8m/s$$", "p", "q", "$price=\$19,0$", "banana"]

Но пока я счастлив без этой функции.

Моя лучшая попытка была (\$[^\$]*\$)|[^,]+

Что соответствует только первой группе, возвращая: ["$g=9,8m/s$", "p", "q", "$m=19", "0$, "banana"]

Что я здесь не так? Ценю вашу помощь!

1 Ответ

1 голос
/ 14 июля 2020

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

s.match(/\$+[^$\\]*(?:\\[\s\S][^$\\]*)*\$+|[^,\s][^,]*/g)

См. демонстрацию регулярных выражений

Подробности

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