2010-06-01 141 views
2

我正在创建一个perl脚本,我将在JavaScript文件上运行以自动更改(')以中断脚本。简单的Perl脚本帮助需要

实施例:

file.js

document.writeln('&#187; <a href="/LINK1" TARGET="_blank">Lorem ipsum lorem 1</a><br>'); 

document.writeln('&#187; <a href="/LINK2" TARGET="_blank">Lorem ipsum lor'em x em 2</a><br>'); 

document.writeln('&#187; <a href="/LINK3" TARGET="_blank">Lorem ipsum lorem 3</a><br>'); 

在第二行 “Lorem存有lor'em X EM 2” 包含一个单引号将由脚本被移除。单引号的其余部分将在那里像“document.writeln(””

+0

你是将不得不更多地解释这个提议的Perl脚本如何与包含Javascript的文件相关联,以及为什么它必须定期运行。 – Pointy 2010-06-01 11:23:52

+0

不需要。它不会定期执行一次。 – MUS 2010-06-01 11:28:37

+0

自从他首次输入这个问题后,他就编辑了这个问题,@Motti。它原来没有任何意义。 – Pointy 2010-06-01 11:40:36

回答

3

尝试以下正则表达式:

$data =~ s/ 
    (?<! # negative look-behind 
     \(# ensure no open parenthesis behind 
    ) 
    '  # a quote mark 
    (?! # negative look-ahead 
     \) # ensure no close parenthesis ahead 
    ) 
/\\'/xsg; 

这将需要你的第二行:

document.writeln('&#187; <a href="/LINK2" TARGET="_blank">Lorem ipsum lor'em x em 2</a><br>'); 

输出:

document.writeln('&#187; <a href="/LINK2" TARGET="_blank">Lorem ipsum lor\'em x em 2</a><br>'); 

一个简单的脚本可能是:

while (<>) { 
    $_ =~ ... # regular expression given above 
    print $_; 
} 

你会运行此键入:

perl myscript.pl file.js 
+0

对不起,我没有下载随机的.zip文件。我也没有做你的功课。我已经向你展示了一条道路,决定它是否是你想要的道路取决于你。 – 2010-06-01 12:30:20

0

最简单的方法是,以取代所有的',然后更换回安全的,沿着线的东西:

s/'/\\'/g; # replace all single quotes 
s/document.writeln(\\'/document.writeln('/g; # revert safe occurrences 

显然,这样的解决方案是一个快速和肮脏的修复,如果你对你的输入控制,如果输入格式是不为人所熟知就会失败只会工作