2010-06-01 242 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 

顯然,這樣的解決方案是一個快速和骯髒的修復,如果你對你的輸入控制,如果輸入格式是不爲人所熟知就會失敗只會工作