【问题标题】:How may I dynamically insert a string into a large javascript template string in python?如何在 python 中将字符串动态插入到大型 javascript 模板字符串中?
【发布时间】:2017-07-04 20:36:15
【问题描述】:

假设一个模板 javascript 字符串是这样的:

js_string = u'function hello() { alert({0}); } function goodbye() { alert({1}); }'

我想得到以下结果:

function hello() { alert('Hello!'); } function goodbye() { alert('Goodbye!'); }

我最初的想法是使用 .format() 方法,由于任意花括号导致 KeyError。然后,我查看了this 问题,并将所述花括号替换为双花括号。虽然这会产生预期的结果,但我无法使用它,因为我正在使用一个相当大的 javascript 模板,并且无法更改每个大括号。

我也试过 .replace() 函数:

js_string.replace("{0}", repr("Hello!")).replace("{1}", repr("Goodbye!"))

但是,多次调用 .replace() 对我来说似乎很不方便,这就是为什么我要问是否有任何直接的替代方法来解决这个问题。

【问题讨论】:

  • 您是否在模板中插入了数据以外的任何内容?您可以只制作一个仅包含变量定义的模板并单独添加实际代码。

标签: javascript python string


【解决方案1】:

如果您使用大括号语法,您可以简单地在循环中调用.replace。不需要正则表达式。

for i, replacement in enumerate(["'hello'", "'Goodbye!'"]):
    js_string = js_string.replace('{%s}' % i, replacement)

【讨论】:

    【解决方案2】:

    您可以通过提供一个回调函数来调用sub 来完成替换,该函数读取大括号内的数字,并从列表中获取相应的替换词:

    re.sub(r'\{(\d+)\}', lambda m: ["'hello'", "'Goodbye!'"][int(m.group(1))], js_string)
    

    【讨论】:

      【解决方案3】:

      通过% 运算符使用字符串插值:

      >>> u'function hello() { alert(%r); } function goodbye() { alert(%r); }' % ('Hello', 'Goodbye')
      "function hello() { alert('Hello'); } function goodbye() { alert('Goodbye'); }"
      

      这里%r表示使用repr,如果要直接插入字符串使用%s%% 是文字 %

      更多详情:https://docs.python.org/2/library/stdtypes.html#string-formatting-operations

      【讨论】:

        猜你喜欢
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        • 2012-09-30
        • 1970-01-01
        • 2021-05-01
        相关资源
        最近更新 更多