我似乎无法以正确的方式解释这一点,但如果属性的值太长(Chrome和Safari),String.prototype.replace()
在iPhone与PC上的行为不同。
我有一个简单的函数,用匹配的子字符串替换任何{}
封装,子字符串应该是传递对象的键:
const data = { lang: "en", version: "1.0", user: "marc" };
const rep = (html, data) =>
html.replace(/\{*([\w_\-]+)*\}/g, (match, capture) => data[capture] || "");
const html = '<input type="hidden" name="abcdefghijklmnopqr" value="{lang}">'
上面的代码仅在name属性较短时才适用于iPhone。返回:
<input type="hidden" name="abc" value="en">
<input type="hidden" name="abcdefghijklmnopqr" value="{lang}">
你可以在这里用你的iPhone结账:https://codepen.io/raduchiriac/pen/wQVvRv?editors=0010
编辑:收到下面的答案后,我用{([\w_\-]+)}
修复它
\{*([\w_\-]+)*\}
^
|
你的模式中的这个星号会导致catastrophic backtracking。最有可能的是,引擎只是停止匹配以避免在经过一些步骤后发生崩溃。 (regex101在75,000之后放弃了)。