【发布时间】:2021-09-28 07:39:03
【问题描述】:
如果有谁更擅长正则表达式可以提供帮助,我们将不胜感激。我正在尝试获取以下正则表达式(请参阅 URL)来查找脚本标记中的所有 HTML JavaScript cmets。这将使用 Windows PowerShell 运行所需的任务。
下面的例子是我目前所拥有的。但是,它仍然没有:
(?s)(?(?=\A).*?<script[^>]*>).*?(?:\K\/\/|<\/script>.*?(?:<script[^>]*>|\z)(*SKIP)(*FAIL))
- 应该突出显示“//”右侧的所有文本,直到换行
- 不应在脚本标签内包含 URL
- 脚本标签不应区分大小写
示例 URL 还包括七个测试场景: https://regex101.com/r/YpCJXM/1
目标: 如果每个场景都可以突出显示注释文本,而不包括脚本标记之外的任何额外区域。只要它适用于 regex101,我就可以让它适用于 PS!
编辑:我完全知道你不应该用正则表达式来解析它!不过,我敢肯定,只要完成此任务所需的少数场景,就可以轻松地处理更熟练的正则表达式。
编辑_2: 下面是另一个例子。但是,它仍然没有:
(\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*)
- 应该只在脚本标签内包含文本
回答: 以下是 MikeM 的回答略有变化,允许 http 或 https
(?si)(?<!http:|https:)\/\/[^\r\n]*(?=(?:(?!<script[^>]*>).)*<\/script>)
【问题讨论】:
-
您可能想快速浏览一下this answer
-
是的,我知道您不应该使用正则表达式进行解析。但是,这是一种不寻常的情况,能够收集 JS cmets 将极大地受益。它不需要查找所有内容,理想情况下示例中创建的七个测试应该通过。
-
这有帮助吗?
\K(?<!https:)\/\/.*?[\r\n]| -
您希望 DOM 解析器选择所有与 JavaScript 匹配的脚本节点,然后使用 Javascript 解析器提取所有 cmets。 HTML 和 JavaScript 都不是常规语言。您可能可以使用正则表达式完成第二部分,因为您的用例有些具体。第一部分实际上是一个单行选择器。
-
@TheMadTechnician,谢谢。但是,不幸的是,这也包括 之外的项目
标签: javascript html regex