javascript - 仅当模式中不存在字符串时,正则表达式才匹配模式

标签 javascript regex regex-negation regex-lookarounds regex-greedy

一直在寻找典型场景的正则表达式。不确定如何在正则表达式中实现这一点。

Regex ---> (?is)[^:]\/\/
Payload ---> Regexp,test//check//last://
Matches ---> t// and k//

问题:我需要修改上面的正则表达式,以忽略//仅当测试字符串以“data:image”开头时的匹配(如下面的有效负载所示)。

Payload ---> data:image/png;base64,test//check//last://

在上述情况下,它不应该与我的条件匹配(与//匹配),因为测试字符串以“data:image”开头

建议一种修改上述正则表达式的方法,以便我们可以处理这种情况。

最佳答案

如果我正确理解你的问题,你希望正则表达式匹配你的模式 // 和前面的字符不应该是 :。仅当测试字符串data:image开头时才应进行匹配。

/(?!data:image)(?:.*?)([^:]\/\/)/giy
  • (?!data:image) 确保字符串不以 data:image 开头
  • (?:.*?) 非捕获非贪婪匹配
  • ([^:]\/\/) 匹配 // 以及前面不应该是 :<
  • /y 表示粘性匹配,以便仅从上一个匹配结束的位置进行匹配。这样,对于以 data:image 开头的字符串,它不会匹配任何内容

var regex = /(?!data:image)(?:.*?)([^:]\/\/)/giy

// This shouldn't match since test string starts with data:image
var payload = "data:image/png;base64,test//check//last://";
var match = regex.exec(payload);
console.log(match);

// This should find matches since payload doesn't start with data:image
var anotherpayload = "Regexp,test//check//last://";
match = regex.exec(anotherpayload);
while (match != null) {
  // Accessing group 1
  console.log(match[1])
  match = regex.exec(anotherpayload);
}

关于javascript - 仅当模式中不存在字符串时,正则表达式才匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44023317/

相关文章:

javascript - 在 URL 后添加随机数

php - 倒计时时钟

javascript - jquery clone 不复制事件处理程序

regex - 如何忽略正则表达式捕获中的前导零?

R中的正则表达式否定

javascript - 使用 Javascript 重置除一个字段之外的表单

regex - 如何获取两个字符之间的数字?

python - 从文件中打印行时出现意外的换行符

PHP - 在字符串中添加指向 URL 的链接(如果不存在)

javascript - 没有特定单词的行匹配的正则表达式