шаблон регулярных выражений, начинающийся с «=» , и исключения

#json #regex #vscode-extensions

Вопрос:

Я пытаюсь написать выражение, которое будет использоваться с файлами json для расширения vscode. Мое выражение должно начинаться с "=s*" , а затем я хочу, чтобы оно выбирало все после равного, за исключением следующих случаев:

  1. TRUE или FALSE после равенства
  2. начиная с цифры
  3. начиная с «или»

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

Пример строк документа:

abc = тест
abc = ИСТИННАЯ
abc = ЛОЖНАЯ
abc = «тест»
abc = «тест»
abc = 123

Из этих примеров мое регулярное выражение должно содержать только самое первое, и «тест» может быть чем угодно.

Что было ближе всего к решению, так это то, что /(=s*)^(((?!TRUE|FALSE|[0-9]|"|').)*)$/gm

Комментарии:

1. Пожалуйста, добавьте то, что вы пытались ответить на этот вопрос. В чем конкретно заключалась проблема с «соединением» шаблонов? Есть ли у вас какие-либо тестовые примеры/тексты, которые вы тестировали? Пожалуйста, также добавьте его сюда и укажите ожидаемое поведение.

2. возможно, даже добавить тестовые примеры, такие как «abc», должно совпадать, но «abd» не должно совпадать

3. Возможно, вы просто пытаетесь прочитать что-то вроде файла dotenv , и вам, вероятно, следует обратиться к уже существующему решению .

4. Извините, вы хотите, чтобы совпадала вся строка или только = пробелы? Если последнее используется =(?!s*(?:TRUE|FALSE|[0-9"']))s* , то, в противном случае, используйте .*=(?!s*(?:TRUE|FALSE|[0-9"'])).*

5. Похоже, вы планируете анализировать JSON с помощью регулярных выражений. Если это так, то это не тот инструмент, который нужно использовать, и вы столкнетесь с проблемами, когда получите JSON, который выглядит не совсем так, как вы ожидаете.

Ответ №1:

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

Найти что: ^(.*?=)(?!s*(?:TRUE|FALSE|[0-9"'])).*
Заменить На: $1

Подробные сведения:

  • ^ — начало строки
  • (.*?=) — Группа 1: любые нулевые или более символов, кроме символов разрыва строки, как можно меньше, а затем = символ
  • (?!s*(?:TRUE|FALSE|[0-9"'])) — отрицательный внешний вид, который не соответствует совпадению, если сразу справа от текущего местоположения есть
    • s* — ноль или более пробелов
    • (?:TRUE|FALSE|[0-9"']) TRUE , FALSE , цифра или " или '
  • .* — остальная часть очереди.

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

введите описание изображения здесь