Негативный взгляд назад. Как исправить регулярное выражение, чтобы использовать его в IE11, Safary? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать регулярное выражение, соответствующее <<merge_field>> и не соответствующее href="<<merge_field>>

Я использовал отрицательную конструкцию lookbehind, но она не работает в IE11 и Safari. Есть ли какое-либо решение регулярного выражения?

Текущее выражение: (?<!href=")[<]{2}((?:merge_field))[>]{2}

1 Ответ

0 голосов
/ 13 ноября 2018

В одном регулярном выражении мы сопоставляем часть, которая обычно пропускается, с проверочным утверждением href="<<merge_field>>
, а также необходимую вам часть <<merge_field>>.

Это ONLY способ обойти дефицит внешнего вида в JS.
Это работает путем полного потребления плохой части и перемещения текущей позиции за ней
Существует НЕТ иначе, не обманывайтесь.

Это делается в обратном вызове замены строки.
В обратном вызове вы можете использовать логику для контроля того, что записывается как часть замены.

В нашем обратном вызове, если сопоставляется группа 1, мы просто возвращаем группу 1, таким образом, не изменяя ее содержимое.

Если группа 2 совпадает, вы можете решить, просто ли возвращать группу 2, ничего не меняя
(если вы просто записываете свою позицию или нажимаете элемент массива),
или просто измените ее нато, что ты хочешь.

var target = "href=\"<<merge_field>> and <<merge_field>> and href=\"<<merge_field>>";

var targ_new = 
    target.replace( /(href=["']<<merge_field>>)|(<<merge_field>>)/g,
       function( match, grp1, grp2 ) {
          if ( grp1 )
             return grp1;
          return "MRG"; // or return grp2 if just recording location
       }
    );

console.log( "Before:\r\n" + target);
console.log( "After:\r\n" + targ_new );
...