模仿否定后向查找以匹配 JavaScript 正则表达式中未紧随其后的特定字符的模式

2023-12-30

我在 Javascript 中有这个正则表达式:

0x[A-F0-9]{2}\g

我想修改它,以便在前一个字符不是时获得匹配\。 像这样的东西:

  • 0x60-> 正确
  • \0x60-> 假

我想出了类似的东西,但它不能正常工作:

[^\\]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(使用前将#替换为@)

模仿否定后向查找以匹配 JavaScript 正则表达式中未紧随其后的特定字符的模式 的相关文章

随机推荐