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

时间:2017-05-17 11:16:39

标签: 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"

开头

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

1 个答案:

答案 0 :(得分:0)

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

/(?!data:image)(?:.*?)([^:]\/\/)/giy
  • (?!data:image)确保字符串不以数据开头: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);
}