我是正则表达式和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/