我在 Javascript 中有这个正则表达式:
0x[A-F0-9]{2}\g
我想修改它,以便在前一个字符不是 \
时获得匹配。
类似这样的事情:
0x60
-> true\0x60
-> false
我想出了类似的东西,但它不能正常工作:
[^\\]0x[A-F0-9]{2}\g
它匹配除 \
之外的所有内容,我的意思是:
a0x50
-> true,包括“a”_0x50
-> true,包括“_”- ...
\0x50
-> false
有可能实现吗? 谢谢。
最佳答案
要点是将您通常放入负向后查找的模式匹配到可选捕获组中,然后检查该组是否匹配。如果是,则不需要匹配,否则使用它。
如果需要匹配和收集子字符串,请使用
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/>";
如果您需要替换仅那些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/>";
关于javascript - 模仿否定后向查找以匹配 JavaScript 正则表达式中未紧随其后的特定字符的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37059319/