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

标签 javascript regex regex-lookarounds lookbehind negative-lookbehind

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

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

我想修改它,以便在前一个字符不是 \ 时获得匹配。 类似这样的事情:

  • 0x60 -> true
  • \0x60 -> false

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

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

它匹配除 \ 之外的所有内容,我的意思是:

  • a0x50 -> true,包括“a”
  • _0x50 -> true,包括“_”
  • ...
  • \0x50 -> false

正则表达式示例:regex101 ,后跟 Plnkr .

有可能实现吗? 谢谢。

最佳答案

要点是将您通常放入负向后查找的模式匹配到可选捕获组中,然后检查该组是否匹配。如果是,则不需要匹配,否则使用它。

如果需要匹配和收集子字符串,请使用

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/

相关文章:

使用正则表达式拆分 Python 字符串

java - 用于从 NiFi 中的文件中提取文本的正则表达式

删除 R 中括号之前但逗号之后的字符

正则表达式查找数字和单词之间缺少空格的位置

正则表达式查找多行字符串,其中包含行之间的另一个字符串

javascript - 在 Javascript 中删除数组中的重复项

javascript - 如何通过 ES6 "class"函数以 Angular 传递数据

javascript - 如何在显示对话框时暂时禁用网页滚动?

javascript - 在 iFrame 中嵌入 Google Apps 脚本

c# - 创建标记语言 - 条件