Исключить фигурные скобки - PullRequest
0 голосов
/ 31 марта 2020

У меня есть следующие строки:

  1. logger.debug ('123', 123)
  2. logger.debug (`123`, 123)
  3. logger.debug ('1b c', 'test')
  4. logger.debug ('1b c', `test`)
  5. logger.debug ('1b c ', тест)
  6. logger.debug (' 1b c ', {})
  7. logger.debug (' 1b c ', {})
  8. logger.debug ('1b c', {test})
  9. logger.debug ('1b c', {test})
  10. logger.debug ('1b c ', {test})
  11. logger.debug (' 1b c ', {test})

Вместо debug могут быть другие вызовы, такие как warn, fatal et c. Все пары котировок могут быть "", '' или ``.

Мне нужно создать обычный express, который соответствует случаю 1 - 5, но не 6 - 11.

Вот что я придумал:

logger.*\(['`].*['`],\s*.([^{.*}])

Это также соответствует 8 - 11, так что я подозреваю, что эта часть неверна ([^{.*}]), но я не понимаю, почему.

Ответы [ 2 ]

3 голосов
/ 31 марта 2020

Вы можете попробовать это

logger\.[^(]+\((?:"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|`(?:\\`|[^`])*`),[^{}]*?\)

enter image description here

Regex Demo

PS: - Это шаблон может быть сокращен, если мы уверены, что не будет никакого несоответствия кавычек, а также если не будет никакой экранированной кавычки внутри строки

Если нет экранированной строки

logger\.[^(]+\((?:"[^"]*"|'[^']*'|`[^`]*`),[^{}]*?\)

Если между строкой нет кавычек. то есть без строк, как "mr's jhon

logger\.[^(]+\(([`"'])[^"'`]*\1,[^{}]*?\)
2 голосов
/ 31 марта 2020

Если между цитируемыми частями нет кавычек, вы можете использовать группу захвата для соответствия одному из типов кавычек (['`"]) и использовать обратную ссылку \1 для соответствия типу закрывающей кавычки.

\r\n в классе символов с отрицанием означает, что он не пересекает границы новой строки.

Шаблон будет соответствовать либо цитируемым частям, либо 1+ разу символа слова для первой части.

вторая часть соответствует любому символу, кроме { или } или ) с использованием отрицательного класса символов .

logger\.[^(\r\n]+\((?:(['`"])[^'`"]+\1|\w+),[^{})\r\n]+\)

, который будет соответствовать

  • logger\. совпадение logger.
  • [^(\r\n]+ совпадение 1+ раз с любым символом, кроме ( или новой строкой
  • \( совпадение (
  • (?: Группа без захвата
    • (['`"]) Захват Группа 1
    • [^'`"]+\1 Совпадение 1+ раз с любым символом, кроме типов кавычек, обратная ссылка на захваченный
    • | или
    • \w+ Соответствие 1+ словам символов
  • ), Закрыть группу без захвата и m atch ,
  • [^{})\r\n]+ Совпадение 1+ раз с любым символом, кроме { } ) или новой строкой
  • \) Совпадение )

Regex demo

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