
Я хочу альтернативное решениеэтот хак jQuery, пробуя немного изобрести велосипед -- смотрите, я уверен, что смогу сделать это с помощью какой-нибудь однострочной команды, используя базовые инструменты *ix. Посмотрите, гораздо более простой и прямой способ -- найти все числа, к которым добавлен px, некоторые \d+px
-match, а затем умножить их на константу, но \d
это не сработает -- сопоставить только если не предваряется цифрой [^\d]\d+px
, а затем выполнить замену/умножение.
Побеждает самое простое и элегантное решение. Как можно выполнить сопоставление-умножение-замену?
Я использую Vim, но открыт для новых идей.
решение1
bash-4.2$ cat map.htm
<map name="world">
<area shape="rect" coords="0%,0%,32%,32%" >
<area shape="rect" coords="8%,40%,50%,80%" >
<area shape="rect" coords="56%,4%,84%,18%" >
<area shape="rect" coords="74%,20%,90%,40%" >
<area shape="rect" coords="70%,42%,96%,62%" >
<area shape="rect" coords="0%,74%,70%,95%" >
</map>
bash-4.2$ perl -pe '$w=640;$h=480;s!(\d+)%,(\d+)%,(\d+)%,(\d+)%!($1*$w/100).",".($2*$h/100).",".($3*$w/100).",".($4*$h/100)!ge' map.htm
<map name="world">
<area shape="rect" coords="0,0,204.8,153.6" >
<area shape="rect" coords="51.2,192,320,384" >
<area shape="rect" coords="358.4,19.2,537.6,86.4" >
<area shape="rect" coords="473.6,96,576,192" >
<area shape="rect" coords="448,201.6,614.4,297.6" >
<area shape="rect" coords="0,355.2,448,456" >
</map>
Конечно, в определенных обстоятельствах это не сработает, поскольку регулярные выражения не являются способом анализа HTML, посколькузаключил на SO. Но решение с помощью специального HTML-парсера больше не будет однострочным.
Но если вы уверены, что не возникнет конфликтов с обычным текстом, выглядящим как пара координат, вы можете даже сократить его до следующего вида:
perl -pe '$w=640;$h=480;s!(\d+)%,(\d+)%!int($1*$w/100).",".int($2*$h/100)!ge' map.htm