regex - 脚本:以非常特殊的方式替换文件中的行。如何使用Powershell做到这一点?

标签 regex powershell

我是正则表达式和Powershell脚本的新手。

我的目录中有很多javascript文件。其中大多数包含语句“window.open(...)”(可能一百次)。

我想做的是替换包含以下内容之一的所有行:

  • window.open('...', ...)
  • window.open('...')
  • window.open("...", ...)
  • window.open("...")

  • 分别具有以下内容:
  • window.open(encodeURI('...'), ...)
  • window.open(encodeURI('...'))
  • window.open(encodeURI("..."), ...)
  • window.open(encodeURI("..."))

  • 简而言之,我想将函数encodeURI(...)插入函数调用window.open(...)中的每个第一个参数的前面(如果存在)(根本不需要参数的window.open()不需要做任何事情)。

    我知道如何在目录中查找所有javascript文件,并针对每个文件单独处理每个文件。但是,我在执行我的描述时遇到了一些麻烦。我以为用正则表达式可以理解任何想法。

    谢谢,
    问候。

    最佳答案

    您可以查找并捕获任何以'开头的"window.open(,然后根据第一个捕获组捕获直到找到的下一个' / "的所有内容:

    <#
    $lines = @'
    window.open('...', ...)
    window.open('...')
    window.open("...", ...)
    window.open("...")
    '@ -split '\r?\n'
    #> 
    
    $lines -replace '(?<=window\.open\()([''"])(.*?\1)','encodeURI($1$2)'
    

    (''不是错字,它是powershell单引号字符串转义序列)

    正则表达式模式说明:
    (?<=               # open positive look-behind
      window\.open\(   # literal string `window.open(`
    )                  # close positive look-behind
    (                  # open capture group 1
      ['"]             # one of either ' or "
    )                  # close capture group 1
    (                  # open capture group 2
      .*?              # non-greedy match of 0 or more of any character
      \1               # back-reference to capture group one (ie. either ' or ")
    )                  # close capture group 2
    

    关于regex - 脚本:以非常特殊的方式替换文件中的行。如何使用Powershell做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60692728/

    相关文章:

    php - 将多个 csv 文件组合在一起,并在连接期间添加一列

    Java 正则表达式模式未按预期工作

    regex - 如何在ADF数据流中的表达式生成器中编写表达式

    regex - 正则表达式匹配不包含单词的行

    python - 从文本文件中删除不可打印的 "gremlin"字符

    powershell - ExtendedPropertyDefinition ID 是否有公共(public)枚举?

    javascript - 正则表达式 : capitalize non-ascii character after some special character

    PowerShell 函数参数语法

    .net - 是否可以将 Powershell 变量设置为固定的 N 个字符?

    powershell - Powershell将文件移动到特定文件夹