html/cssモックアップをShopifyテーマに変換する大きなpython/bashスクリプトを作成しようとしています。このプロセスの1つのステップは、すべてのスクリプトソースを変更することです。例えば:
<script type="text/javascript" src="./js/jquery.bxslider.min.js"></script>
になります
<script type="text/javascript" src="{{ 'jquery.bxslider.min.js' | asset_url }}"></script>
これが私がこれまでに持っているものです:
import re
test = """
<script type="text/javascript" src="./js/jquery-1.8.3.min.js"></script>
<!--<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>-->
<script type="text/javascript" src="./js/ie-amendments.js"></script>
<script type="text/javascript" src="./js/jquery.bxslider.min.js"></script>
<script type="text/javascript" src="./js/jquery.colorbox-min.js"></script>
<script type="text/javascript" src="./js/main.js"></script>
"""
out = re.sub( 'src=\"(.+)\"', 'src="{{ \'\\1\' | asset_url }}"', test, flags=re.MULTILINE )
out
プリントアウト
'\n <script type="text/javascript" src="{{ \'./js/jquery-1.8.3.min.js\' | asset_url }}"></script>\n <!--<script src="{{ \'http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript\' | asset_url }}"></script>-->\n <script type="text/javascript" src="{{ \'./js/ie-amendments.js\' | asset_url }}"></script>\n <script type="text/javascript" src="{{ \'./js/jquery.bxslider.min.js\' | asset_url }}"></script>\n <script type="text/javascript" src="{{ \'./js/jquery.colorbox-min.js\' | asset_url }}"></script>\n <script type="text/javascript" src="{{ \'./js/main.js\' | asset_url }}"></script>\n'
これまでに2つの問題があります。
正規表現内の一重引用符をエスケープするために使用しているバックスラッシュ文字の一部が出力に表示されます。
私のキャプチャグループは元のソース文字列全体をキャプチャしていますが、最後の「/」の後に続くものが必要です。
答え:Martijn Pietersの役立つ提案ごとに、私は?をチェックしました。正規表現演算子、そしてこの解決策を思いついた、それは私の問題を完全に解決した。また、置換式については、シングルではなくダブルクォートでカプセル化し、ダブルをエスケープしたため、不要なバックスラッシュが削除されました。みんなありがとう!
re.sub( r'src=".+?([^/]+?\.js)"', "src=\"{{ '\\1' | asset_url }}\"", test, flags=re.MULTILINE )