Я не могу объяснить это правильно, но String.prototype.replace()
действует по-разному на iPhone против ПК, если значение атрибута слишком длинное (как Chrome, так и Safari).
У меня есть простая функция, которая заменяет любую инкапсуляцию {}
соответствующей подстрокой, которая должна быть ключом передаваемого объекта:
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}">'
Приведенный выше код работает только на 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_\-]+)}