RegEx для сопоставления различных типов цитат - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу небольшой язык сценариев для своей игры.

Я хотел бы разрешить для каждой строки JS буквальные строки (`"').

Я понял, как проверить все внутри, используя:

(?<e1>""|'|`)(?:\$\k<e1>|(?!\k<e1>).)*\k<e1>)

Работает.
Но сейчас у меня другая проблема. Мне нужно удалить все вкладки, которые не находятся внутри этих типов цитат.

Я посмотрел здесь как сопоставить все, что не в кавычках:

\t(?=([^"\\]*(\\.|"([^"\\]*\\.)*[^"\\]*"))*[^"]*$)

И у меня возникли проблемы при соединении этих двух миров, так что "a`\t`" не удаляет эту среднюю вкладку как

\t(?=([^"'`$]*(\$.|['`"]([^"'`$]*\$.)*[^"'`$]*["`']))*[^"`']*$)

делает. Я знаю, я должен проверить последнюю не-экранированную (с $ не \) цитату, но как мне это сделать?

1 Ответ

1 голос
/ 29 апреля 2019

Вы можете сопоставить то, что вы не хотите, и сохранить то, что вы хотите, используя группу захвата.

В этом случае вы можете обернуть свой первый шаблон в группу захвата и добавить чередование , используя канал | после него, чтобы соответствовать 1+ раз на вкладке.

При замене используйте первую группу захвата:

((?<e1>""|'|`)(?:\$\k<e1>|(?!\k<e1>).)*\k<e1>)|\t+
^                                            ^^^^^    

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...