Muranx
@Muranx
кто понял this тот в цирке не смеётся

Почему в данном примере не работает регулярное выражение?

Здравствуйте !

Подскажите что в данном случае получится в результате выполнения данного кода ?
console.log( this ) ;
шучу . . .

Задача следующая. . . У меня есть несколько div блоков , в которых с помощью regExp мне нужно заменить кое - что на кое - что , собственно всё почти получилось , однако по неведомой мне причине , некоторые регулярки абсолютно не работают , точнее регулярки чуть более сложные чем обычные слова заключенные в /. . ./. . .

<div class="any">function agg(){return true}</div><br>
<div class="any">function yt(x){return x.toUpperCase()}</div><br>
<div class="any">function (t, y, z){return "hello"}</div><br>
<div class="any">function hello(n){return Math.sqrt(n)}</div><br>
<div class="any">function h32(){console.log(false)}</div><br>

let test = document.querySelectorAll('.any');

let regCon = {
  '/function/' : '<span style="color: red">',
  '/return/' : '<span style="color: orange">',
  '/console(?=\.)/' : '<span style="color: purple">',
  // '/(?<=function\s)\w+(?=\()/' : '<span style="color: blue">', // ВОТ ЭТА СТРОКА
};

for(let k=0; k<test.length; k++){
    for(let o in regCon){
        test[k].innerHTML = test[k].innerHTML.replace(new RegExp(eval(o), 'gim'), m => regCon[o]+m+'</span>');
    };
};

Т . е . если разкоментить строчку ВОТ ЭТА СТРОКА , то скрипт не работает корректно , ХОТЯ в том-же regExp101.com данная ' регулярка ' абсолютно корректно работает ! Прошу вашей помощи в объяснении этого случая ! Ну и если вдруг , ответ будет настолько простым , что придётся просто заменить какой-нибудь индекс в цикле , или поставить где-нибудь лишнюю запятую , если вам будет не сложно , скажите пару слов по поводу реализации , я имею ввиду сам принцип , что есть объект у которого ключ это регулярка , а значение , это то , НА что мы будем заменять , ну и разумеется работа с циклом , в общем ваше компетентное ( i hope ) мнение ! Спасибо !
  • Вопрос задан
  • 126 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Если открыть консоль бразуера, там появится ошибка из-за закоменнченной строки: "invalid regexp group"
По крайней мере, у меня в FireFox.
Потому, что FireFox не поддерживает такой изыск регулярок как look-behind (?<= ). IE, Safari – тоже.

И хорошо бы убрать eval() и слеши в ключах regCon:
'function' : '<span style="color: red">',
// ...
new RegExp(o, 'gim')
Ответ написан
rpsv
@rpsv
делай либо хорошо, либо никак
Очень вероятно проблемы с экранированием. Конструктор RegExp строку кушает, измените на строку и избавьтесь от eval.
https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы