正则表达式否定后向替换JavaScript

时间:2019-07-04 17:45:24

标签: javascript regex negative-lookbehind

我有一个带有负向后断言的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

Live Demo

正如@BaliBalo所说,我当前的正则表达式包含错误,无法正常工作 Error Demo 我需要在https://stackoverflow.com/

中捕获//https://stackoverflow.com///

1 个答案:

答案 0 :(得分:1)

如果只想在替换中使用它们,可以尝试相反的操作。还要捕获您不想要的内容(如果存在),如果是这样,则忽略匹配项。在某些情况下,这种行为略有不同,但在大多数情况下是可以接受的。

例如,您的正则表达式可以是:

let result = input.replace(/(https?:)?\/\/((?:https?:\/\/|.)+?)\/\//g, (m, e1, val) => e1 ? m : '[match](' + val + ')');