RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1395245
Accepted
De.Minov
De.Minov
Asked:2022-08-30 20:23:31 +0000 UTC2022-08-30 20:23:31 +0000 UTC 2022-08-30 20:23:31 +0000 UTC

忽略正则表达式中的正则表达式匹配

  • 772

您需要使用正则表达式来查找“多行”代码注释,例如/**/.

我写了一个正则表达式\/\*(?:.*|\s*)\*\/(regex101),一般来说它可以工作,但是如果在评论中遇到评论,那么正则表达式只考虑“更深”的那个

如何在正则表达式中忽略正则表达式?

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Laukhin Andrey
    2022-09-03T13:43:16Z2022-09-03T13:43:16Z

    获取代码中的注释

    如果任务是像编译器(和代码编辑器)那样查找多行注释,那么解决方案似乎很简单:

    /\/\*.*?\*\//gs 考试

    底线:打开后,/*我们对第一个做出反应*/。而且效果很好。
    但也有细微差别。
    首先。如果评论是打开的,但没有结束标签,那么你应该选择文本末尾的所有内容。定影:

    /\/\*.*?(?:\*\/|$)/gs

    第二。如果构造/**/出现在字符串常量中(用引号括起来),那么这些构造也会被突出显示。*/奇怪的是,即使标签用引号引起来,打开的评论也会关闭标签。下面是对上述内容的演示: 由此我们可以得出结论,在字符串常量中显式使用这些标签原则上是不好的做法。因此在代码中遇到这种情况的概率非常小。
    在此处输入图像描述

    然而,在一个常规赛季中考虑到这一点是非常可取的。
    因此,字符串常量和注释会被抽样。RW 用于选择单引号中的字符串,包括转义的字符串:我们以'(?:\\.|[^\\'])*(?:'|$)
    相同的方式选择:直到结束引号,或者直到文本结尾(我们稍后会讨论)。

    遵循“谁先开,那个和符号”的原则,可以作如下表达:

    /\/\*.*?(?:\*\/|$)|"(?:\\.|[^\\"])*(?:"|$)|'(?:\\. |[^\\'])*(?:'|$)/gs

    很明显,结果将包含注释和引用的字符串。我们只需要按第一个字符过滤选择。如果/,则发表评论。

    好吧,为了全图,您需要添加一行注释//:

    /\/\*.*?(?:\*\/|$)|\/\/[^\n]+?\n|"(?:\\.|[^\\"])*( ?:"|$)|'(?:\\.|[^\\'])*(?:'|$)/gs

    细微差别第三。一些语言支持设置多行字符串,而另一些则不支持,或者为此提供了特殊的构造(如 JS 中的反引号)。这取决于代码编辑器如何突出显示行和注释。

    上面的 rv 适用于例如 PHP。
    如果语言只支持指定单行字符串,那么您需要更改突出显示字符串常量的条件(直到行尾,而不是文本):

    /\/\*.*?(?:\*\/|$)|\/\/[^\n]+?\n|"(?:\\.|[^\\"])*? (?:"|\n)|'(?:\\.|[^\\'])*?(?:'|\n)/gs

    在 JS 中,您可以使用连字符指定多行字符串\,也可以使用反引号。RW 中已经考虑了第一个选项,应该添加第二个选项:

    /\/\*.*?(?:\*\/|$)|\/\/[^\n]+?\n|"(?:\\.|[^\\"])*? (?:"|\n)|'(?:\\.|[^\\'])*?(?:'|\n)|`(?:\\.|[^\\`]) *?(?:`|$)/gs

    使用 Notepad++ 和 Visual Studio Code 测试。当然,可能还有更多细微差别。人们建议对此类任务使用解析器。

    分层选择(嵌套匹配)

    如您所知,RegExJavaScript 不支持递归。这个库可以作为摆脱这种情况的一种方式。

    原生 RegEx 可以做什么?
    让我们用单字符标签来分析情况,例如{和}。
    选择层次结构中最深元素的条件很简单:该元素内部不包含 { 和 } 标签:
    {[^{}]*} Check
    选择父元素的条件类似。它包含一个子元素,其他元素被排除在它自己的标签和子标签之间
    {[^{}]*{[^{}]*}[^{}]*} :

    泛化
    令 L 为开始标记,R 为结束标记,# 为元素内容的条件。那么广义方案将如下所示:

    L0 L # R
    L1 L# L# R# R
    L2 L# L# L# R# R# R
    L3 L# L# L# L# R# R# R# R
    …………
    

    以及嵌套级别为 n 的“递归”选择的完整正则表达式:
    Pn = L0|L1|L2|L3|...|Ln
    (我们从深度计算级别)

    P3检查

    多字符标签。在这里,元素内容的条件看起来不同:
    (?:.(?<!L))*?,其中 L 是左标签。您需要添加一个修饰符s。然后一切都按照计划进行。

    检查 P0 /检查 P3

    因此,使用本机 RegEx,我们可以针对有限范围的任务进行具有已知嵌套级别的分层选择。正如你所看到的,这个怪物随着每个级别的增长而增长。我希望这些信息对某人有用。

    • 1

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5