首页 > 解决方案 > 如何检查链接中是否包含“/-s”?

问题描述

我使用以下正则表达式:\^(https?:\/\/)?(www.)?(m\.)?soundcloud\.com\/[^ "]+\/[^ "]+\/(s\-)[^ "]+\g检查 soundcloud 链接是公共的还是私有的,但是它不起作用,因为我在过去 2 小时内一直在阅读正则表达式,但仍然没有弄清楚,私有和公共链接测试true

私人链接:https://soundcloud.com/user/album- 应该匹配
私人链接:https://soundcloud.com/user/album/IX8PBwQLvX8- 应该匹配
公共链接:https://soundcloud.com/user/album/s-IX8PBwQLvX8- 应该匹配

唯一标识符是s-最后一个/,所以我希望它只有s-在最后一个之后才检查 true/

我对这个正则表达式的推理,请在需要时纠正我。: 检查字符串是否以OR
^(https?:\/\/)?(www.)?(m\.)?开头https://OR : 检查域是否是, duhh : 检查下一个是否有任何数量的字符在它之后不是或。由于 /user 和 /album 路由,我使用了两次: Find the group after the lastwww.m.
soundcloud\.comsoundcloud.com
\/[^ "]+/ space/u200b"
\/(s\-)s-/

标签: javascriptregex

解决方案


为了检查最后一个反斜杠之后是否是“s-”,您可以将其添加(?=.*\/s-)到您的模式前面,使其变为:

(?=.*\/s-)^(https?:\/\/)?(www.)?(m\.)?soundcloud\.com\/[^ "]+\/[^ "]+\/(s\-)[^ "]+

此外,您应该在 www 之后转义到点,并且由于有效链接不能包含空格,因此您可以安全地删除模式的这一部分中的空格,[^ "]并且当您重复这部分两次时,您可以删除第二部分并将其放入分组并使用 {2} 检查此模式重复两次:

(?=.*\/s-)^(https?:\/\/)?(www\.)?(m\.)?soundcloud\.com\/([^"]+\/){2}(s-)[^"]+

见正则表达式演示


推荐阅读