我在 Javascript 中有这个正则表达式:
0x[A-F0-9]{2}\g
我想修改它,以便在前一个字符不是时获得匹配\
。
像这样的东西:
我想出了类似的东西,但它不能正常工作:
[^\\]0x[A-F0-9]{2}\g
它匹配一切,除了\
,我所说的一切是指:
-
a0x50
-> true,包括“a”
-
_0x50
-> true,包括“_”
- ...
-
\0x50
-> 假
正则表达式示例:regex101 https://regex101.com/r/fV1zT8/3,后面跟着一个Plnkr https://plnkr.co/edit/KA1i5aXPVfvSBsSXeZ90?p=preview.
有可能实现吗?
谢谢。
要点是将您通常放入负向后查找的模式匹配到可选捕获组中,然后检查该组是否匹配。如果是,则不需要匹配,否则,请使用它。
如果需要匹配并收集子串, use
var re = /(\\?)0x[A-F0-9]{2}/gi;
var str = '\\0x50 0x60 asdasda0x60';
var res = [];
while ((m = re.exec(str)) !== null) {
if (!m[1]) {
res.push(m[0]);
}
}
document.body.innerHTML = "TEST: " + str + "<br/>";
document.body.innerHTML += "RES: " + JSON.stringify(res,0,4) + "<br/>";
如果你需要replace只有那些没有的字符串\
之前0x..
,在其中使用回调replace
方法来检查组 1 是否匹配。如果是,则替换为整个匹配项,如果不是,则只需替换为您需要的模式。
var re = /(\\?)0x[A-F0-9]{2}/gi;
var str = '\\0x50 0x60 asdasda0x60';
var res = str.replace(re, function(m, group1){
return group1 ? m : "NEW_VAL";
});
document.body.innerHTML = "TEST: " + str + "<br/>";
document.body.innerHTML += "RES: " + res + "<br/>";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)