[英]Regex to match pattern only if a string is not present in pattern
坚持为典型场景寻找正则表达式。 不确定如何在正则表达式中实现这一点。
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); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.