Подтвердить что ты не робот

Почему 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, как описано в ссылке?

4b9b3361

Ответ 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