Javascript replace()在iPhone上行为不端用于长字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript replace()在iPhone上行为不端用于长字符串相关的知识,希望对你有一定的参考价值。
我似乎无法以正确的方式解释这一点,但如果属性的值太长(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之后放弃了)。
以上是关于Javascript replace()在iPhone上行为不端用于长字符串的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript replace() 方法转换时间数据中的“-”和“/”
.replace 不是 javascript 中的函数错误 [重复]