Регулярное выражение: решение регулярного выражения с отрицанием - PullRequest
1 голос
/ 01 апреля 2020

У меня есть файл, в котором я хочу отфильтровать строку, в которой нет строки node_module. Итак, учитывая файл:

./sec24_proj31/node_modules/eslint-plugin-react/lib/rules/no-did-update-set-state.js:componentDidUpdate
./sec08_proj20_burger_builder/src/components/UI/Modal/Modal.js:componentDidUpdate

Я пытался с этими регулярными выражениями, но они не работают:

grep -E 'componentDidUpdate' test | grep -E '(?!.*node_modules.*)'
grep -E '(?!.*node_modules.*)componentDidUpdate' test'

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

Спасибо!

1 Ответ

1 голос
/ 01 апреля 2020

Ваша проблема в том, что у вас нет привязки к отрицательному взгляду, поэтому он может совпадать в любом месте первой строки после n в node_modules. Вы можете исправить это, добавив привязку начала строки (^), то есть

grep -E 'componentDidUpdate' test | grep -E '^(?!.*node_modules)'

В качестве альтернативы вы можете объединить два регулярных выражения (с привязкой) и использовать .* перед componentDidUpdate, чтобы это могло произойти где-либо в строке:

grep -E '^(?!.*node_modules).*componentDidUpdate' test'

Примечание:

  1. .* после node_modules в поле зрения не требуется.
  2. Возможно, вы захотите поставить разрывы слов (\b) вокруг node_modules и / или componentDidUpdate, чтобы (например) вы не соответствовали anode_modules или nocomponentDidUpdate. Для node_modules может быть достаточно просто окружить его / символами.
...