我有一个带有负向后断言的JS正则表达式,可以在基于Chromium的浏览器中很好地工作:
(?<!https?:)\/\/(.+?)(?<!https?:)\/\/gmi
我需要将其替换为另一个,以实现跨浏览器兼容性(不适用于FF或Safari)。
正则表达式的意思是“查找并捕获所有发生的事件 内的斜杠// //,除非//之前保持http:或https:”。
示例:
bar //foo bar// foo - match (capture //foo bar//)
//https://stackoverflow.com/// - match (capture https://stackoverflow.com/)
https://stackoverflow.com// - not match
//foo http://stackoverflow.com - not match
正如@BaliBalo所说,我当前的正则表达式包含错误,无法正常工作
Error Demo
我需要在https://stackoverflow.com/
//https://stackoverflow.com///
答案 0 :(得分:1)
如果只想在替换中使用它们,可以尝试相反的操作。还要捕获您不想要的内容(如果存在),如果是这样,则忽略匹配项。在某些情况下,这种行为略有不同,但在大多数情况下是可以接受的。
例如,您的正则表达式可以是:
let result = input.replace(/(https?:)?\/\/((?:https?:\/\/|.)+?)\/\//g, (m, e1, val) => e1 ? m : '[match](' + val + ')');