消极回头看。如何修复正则表达式以在 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 );
我正在尝试创建正则表达式匹配 <<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 );