我正在尝试编写一个大型 python/bash 脚本,将我的 html/css 模型转换为 Shopify 主题。此过程中的一个步骤是更改所有脚本源。例如:
<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'
到目前为止我有两个问题:
我用来转义正则表达式中的单引号的一些反斜杠字符显示在输出中。
我的捕获组正在捕获整个原始源字符串,但我只需要最后一个“/”之后的内容
答案:根据 Martijn Pieters 的有用建议,我查看了 ? 正则表达式运算符,并提出了这个解决方案,完美地解决了我的问题。此外,对于替换表达式,我将其封装在双引号中,而不是单引号,并转义双引号,最终删除了不必要的反斜杠。多谢你们!
re.sub( r'src=".+?([^/]+?\.js)"', "src=\"{{ '\\1' | asset_url }}\"", test, flags=re.MULTILINE )