javascript - JavaScript中的正则表达式否定后向替换
问题描述
我有一个带有否定后向断言的 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 所说,我当前的正则表达式包含错误并且工作不完美
错误演示
我需要捕获https://stackoverflow.com/
//https://stackoverflow.com///
解决方案
如果您只想在替换中使用它们,则可以尝试相反的方法。如果它在那里,也捕获你不想要的东西,如果是这种情况,请忽略匹配。这在某些边缘情况下的行为略有不同,但在大多数情况下是可以接受的。
例如,您的正则表达式可能是:
let result = input.replace(/(https?:)?\/\/((?:https?:\/\/|.)+?)\/\//g, (m, e1, val) => e1 ? m : '[match](' + val + ')');
推荐阅读
- javascript - Javascript 填充字段给出未定义的函数错误
- mysql - 如何从表中获取每个 id 的最新状态?
- java - PHP to java-treeview 程序
- php - 在处理程序中调用api时如何停止recyclerview的闪烁
- android - 在没有 fcm 、 pusher 的情况下创建我自己的推送通知服务,
- python - 在最终的 GroupBy 中保留空箱/桶,即使没有数据填充它们
- selenium - testng.xml 套件如果失败则跳过所有测试类,它仅适用于 Microsoft Edge 浏览器
- c - c - find palindrome
- visual-studio-code - Haskero:以下 GHC 选项与 GHCi 不兼容,尚未传递给它:-threading
- algorithm - 给定代表单个出租车预订的数据序列(开始位置,结束位置),找到最佳非中断序列