gpt4 book ai didi

正则表达式:用否定解决正则表达式

转载 作者:行者123 更新时间:2023-12-04 18:44:11 24 4
gpt4 key购买 nike

我有一个文件,我想在其中过滤没有 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'

在第一个的情况下,想法是第二个正则表达式过滤第一个输出,但我尝试了许多不同的东西,但都没有奏效。

谢谢!

最佳答案

您的问题是您的负前瞻没有 anchor ,因此它可以匹配 n 之后第一个字符串中的任何位置在 node_modules .您可以通过添加字符串开始 anchor ( ^ ) 来解决此问题,即

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

或者,您可以结合两个正则表达式(与 anchor )并使用 .*componentDidUpdate 前面允许它出现在字符串中的任何位置:
grep -E '^(?!.*node_modules).*componentDidUpdate' test'

注:
  • .*node_modules 之后在前瞻中不需要。
  • 您可能希望在 \b 周围放置分词符 ( node_modules )和/或 componentDidUpdate确保(例如)您不匹配 anode_modulesnocomponentDidUpdate .对于 node_modules/ 包围它可能就足够了人物。
  • 关于正则表达式:用否定解决正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60963088/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com