gpt4 book ai didi

javascript - 匹配和替换哈希注释

转载 作者:行者123 更新时间:2023-12-05 00:36:24 24 4
gpt4 key购买 nike

我在寻找什么
我想在 PowerShell 中匹配不包括内联注释的哈希注释。我可以使用 #(?<!<#)(?![<>])(.*)$ 匹配它们(见 regex101)。但是我想通过不使用lookbehind来实现这一点。有什么方法可以让我通过lookbehind获得与正则表达式相同(或最接近)的行为?
仅正则表达式的解决方案会很好,但我也很欣赏仅 JavaScript 的解决方案。
我试过的
我最好的尝试是#(?!.*>)(.*)$ (见 regex101 ),但我很不高兴它错过了任何有 > 的东西在 # 之后.
我也尝试编写仅解析 JavaScript,但它变得非常复杂(超过 30 行,参见 pastebin)并且非常慢。
为什么我需要它
我使用它来内联开源项目 (GitHub code) 中使用的 PowerShell。但是,该项目在线并在浏览器(website)上运行,不幸的是,我意识到它在 Safari 中不起作用,因为 Safari 尚不支持后视(caniuse.com)。
语法:散列注释与内联注释
规则:匹配所有哈希注释但排除内联注释
PowerShell 中的散列注释,就像在 bash 和其他语言中一样,从散列 ( # ) 开始,一直持续到行尾。

Write-Host "Hello world" # Here is a hash comment
PowerShell 中的内联注释介于 <# 之间和 #>
Write-Host <# Here is an inline comment #> "Hello world"

最佳答案

使用表示纯文本模式的正则表达式,您不仅可以匹配文本片段,还可以捕获部分匹配项。捕获子字符串后,您可以在之后应用所需的任何逻辑,无论是替换还是保留部分字符串。
要替换评论,您可以使用

text = text.replace(/(<#.*?#>)|#.*/g, (m, g) => g ? g : "REPLACED")
要删除评论,您可以使用
text = text.replace(/(<#.*?#>)|#.*/g, "$1")
在这两种情况下,模式都是 (<#.*?#>)|#.* :
  • (<#.*?#>) - 第 1 组:一个 <#文本,然后是除换行符以外的任何零个或多个字符,尽可能少,然后是 #>文字
  • | - 或
  • #.* - # char 和该行的其余部分。

  • 在第一种情况下, (m, g) => g ? g : "REPLACED"替换保留 g如果第 1 组匹配,则为第 1 组值( m 代表整个匹配, g 代表第 1 组值)。在第二种情况下,如果在 $1 的帮助下匹配了 Group 1 值,则它会被放回。反向引用。如果 Group 1 不匹配,则它表示一个空字符串。

    关于javascript - 匹配和替换哈希注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69815095/

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