【问题标题】:Regex to find comments in HTML JavaScript tag [closed]正则表达式在 HTML JavaScript 标记中查找注释 [关闭]
【发布时间】: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(?&lt;!https:)\/\/.*?[\r\n]|
  • 您希望 DOM 解析器选择所有与 JavaScript 匹配的脚本节点,然后使用 Javascript 解析器提取所有 cmets。 HTML 和 JavaScript 都不是常规语言。您可能可以使用正则表达式完成第二部分,因为您的用例有些具体。第一部分实际上是一个单行选择器。
  • @TheMadTechnician,谢谢。但是,不幸的是,这也包括 之外的项目

标签: javascript html regex


【解决方案1】:

以下内容并非万无一失,但它通过了您的测试:

(?si)(?<!https:)\/\/[^\r\n]*(?=(?:(?!<script[^>]*>).)*<\/script>)

正向前瞻确保结束脚本标记位于开始脚本标记之前,在字符串中位于前面。

示例用法:

$pattern = '(?si)(?<!https?:)\/\/[^\r\n]*(?=(?:(?!<script[^>]*>).)*<\/script>)'
$results = $data | Select-String $pattern -AllMatches
$results.Matches.Value

// find this comment here
//find this comment here
//find this comment here
// find this comment here
// find this comment here
//find this comment here
// find this comment here
//find this comment here
//find this comment here with this included also!

【讨论】:

  • 谢谢!稍作编辑以包括 http 和 https 但这工作正常:)
猜你喜欢
  • 2014-03-29
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
相关资源
最近更新 更多