Почему javascript не заменяет глобальный флаг в Chrome или IE, и как мне его обойти?
Согласно String.prototype.replace()
странице в MDN, я должен легко заменить несколько шаблонов, используя
str.replace('what to replace', 'replace with', 'flags')
и установки флагов 'g'
.
Он отлично работает в Firefox 3.6. Но в Chrome и IE8 он заменяет только первый 'what to replace'
.
Я могу использовать
str.replace(/what to replace/gi, 'replace with')
синтаксис. Но я вытаскиваю 'what to replace'
из массива, что затрудняет добавление флагов в этот синтаксис.
Вот код, который я пытаюсь использовать. Как изменить его для работы в Chrome, а также в Firefox?
function generateQuestion()
{
//alert('variable length: '+variableList.length);
for(i=0;i<variableList.length;i++)
{
variable = variableList[i];
rep = replacementList[i];
flags = "gi";
questionText = questionText.replace(variable, rep, flags);
}
}
И почему мне вообще нужно его модифицировать? Не следует ли оценивать JavaScript в JavaScript, как описано в ссылке?
Ответы
Ответ 1
На самой странице, на которую вы ссылались, упоминается:
Использование параметра flags в методе String.replace является нестандартным. Для совместимости с несколькими браузерами используйте объект RegExp с соответствующими флагами.
В принципе, он должен работать только в Firefox. В соответствии с документацией вы можете генерировать регулярные выражения динамически, используя new RegExp
:
var regex = new RegExp(variable, 'gi');
questionText = questionText.replace(regex, rep);
Это потребует variable
для экранирования.
Ответ 2
Похоже, что реализация webkit string.replace, возможно, не имеет третьего параметра, поскольку 'foo'.replace('o','i','g')
приводит к fio
для меня.
При этом появляется следующее сообщение:
'foo'.replace(/o/gi,'i')
Другой вариант:
'foo'.replace(new RegExp('o', 'gi'),'i')
Ответ 3
От Сеть разработчиков Mozilla - JavaScript - Строка - заменить
Нестандартные
Использование параметра flags в методе String.replace является нестандартным. Для совместимости с несколькими браузерами используйте объект RegExp с соответствующими флагами.
Работа в Chrome и Firefox
Чтобы заставить ваш код работать в Chrome и Firefox, вам придется создать объект RegExp (поскольку ваши строки не жестко закодированы) с соответствующими флагами. См. Сеть разработчиков Mozilla - RegExp