消极回头看。如何修复正则表达式以在 IE11、Safari 中使用它?

Negative lookbehind. How to fix regex to use it in IE11, Safary?

我正在尝试创建正则表达式匹配 <<merge_field>> 而不是匹配 href="<<merge_field>>

我使用了负向后视构造,但它在 IE11 和 Safari 中不起作用。有正则表达式解决方案吗?

当前表达式是(?<!href=")[<]{2}((?:merge_field))[>]{2}

在单个正则表达式中,我们将通常会跳过的部分与后向断言相匹配href="<<merge_field>>
以及您需要的部分 <<merge_field>>

这是唯一解决 JS 中后视缺陷的方法。
这通过完全消耗坏的部分来工作,并将当前位置移过它
还有 NO 其他方法,不要被愚弄了。

这是在字符串替换回调中完成的。
在回调中,您可以执行逻辑来控制作为替换的一部分写回的内容。

在我们的回调中,如果第 1 组匹配,我们只是 return 第 1 组,因此不会更改其内容。

如果第2组匹配,你可以决定是否只return第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 );