Во всех браузерах работает, а в IE - синтаксическая ошибка.
Подскажите, как адаптировать следующий JS-код для IE или сделать на JQuery?
var wrongs = "";
function getForbiddenblocks(){
//Сохраняем плохие блоки в виде набора, чтобы избежать дублирования
var matches = new Set();
while ((match = pattern.exec(value)) !== null) {
//Каждый раз срабатывает только одна часть шаблона,
//Поэтому мы можем сделать join, чтобы её получить
matches.add(match.join(''));
//Из-за lookahead регекс срабатывает без увеличения LastIndex
//Чтобы избежать бесконечного цикла, увеличиваем lastIndex вручную
pattern.lastIndex++;
}
//Если набор пустой, то в строке не содержится запрещённых символов
if (matches.size) {
//Преобразуем набор в список и
//объединяем элементы списка в строку через пробел
wrongs = [...matches].join(' ');
}
}
var pattern = /(?:(?=(\{))|(?=(\}))|(?=(\[))|(?=(\]))|(?=(script)))/g; //запрещенные символы
var value = '{ test } [script] {} test123';
getForbiddenblocks();
document.write('Запрещенные символы в строке: ' + wrongs);
@Sergey Nudnov подсказал базовый код вот здесь, но чтобы адаптировать к IE он пишет:
замените ... циклом как здесь
Однако не пойму как это реализовать.
Так подойдет? я заменил работу c Set на объект, чтобы избежать проблем с ie. используем ключи объекта, чтобы повторить логику Вашего скрипта, по избежанию дублирования
var wrongs = "";
function getForbiddenblocks(){
//Сохраняем плохие блоки в виде набора, чтобы избежать дублирования
var matches = {};
while ((match = pattern.exec(value)) !== null) {
//Каждый раз срабатывает только одна часть шаблона,
//Поэтому мы можем сделать join, чтобы её получить
matches[match.join('')]=0;
//Из-за lookahead регекс срабатывает без увеличения LastIndex
//Чтобы избежать бесконечного цикла, увеличиваем lastIndex вручную
pattern.lastIndex++;
}
var arr = Object.keys(matches);
//Если набор пустой, то в строке не содержится запрещённых символов
if (arr.length) {
//Преобразуем набор в список и
//объединяем элементы списка в строку через пробел
wrongs = arr.join(' ');
}
}
var pattern = /(?:(?=(\{))|(?=(\}))|(?=(\[))|(?=(\]))|(?=(script)))/g; //запрещенные символы
var value = '{ test } [script] {} test123';
getForbiddenblocks();
document.write('Запрещенные символы в строке: ' + wrongs);
Продвижение своими сайтами как стратегия роста и независимости