繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM