一直在寻找典型场景的正则表达式。不确定如何在正则表达式中实现这一点。
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/