Во всех браузерах работает, а в 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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При нажатии на одну из двух кнопок отображается имяКак заставить активную кнопку изменять свой цвет и высоту текста, пока не будет нажата...
Здесь два главных класса: класс Поезд и класс Билеты, класс Билеты наследует класс ПоездПроблема в том, что не могу считать из файла ( в который...
Хочу запустить метод в отдельном потоке при помощи функции _beginthread(), но получаю ошибку, если не было указано void* в аргументах функции