Требуется помощь простого сценария Perl - PullRequest
2 голосов
/ 01 июня 2010

Я хочу создать Perl-скрипт, который я буду запускать в файле JavaScript для автоматического изменения ('), который нарушает работу скрипта.

Пример:

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>');

Во 2-й строке «Lorem ipsum lor'em x em 2» содержится одиночная кавычка, которая будет удалена скриптом. Остальные одинарные кавычки будут там как "document.writeln ('"

Ответы [ 2 ]

3 голосов
/ 01 июня 2010

Попробуйте следующее регулярное выражение:

$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 голосов
/ 01 июня 2010

Самый простой способ - заменить все ', а затем заменить обратно безопасные, что-то вроде:

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

Очевидно, что такое решение - быстрое и грязное исправление, которое будет работать, только если у вас есть контроль над вводом, и потерпит неудачу, если формат ввода не очень известен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...