部分url的正则表达式

本文关键字:正则表达式 url 部分 | 更新日期: 2023-09-27 18:09:50

我有以下内容:

https://www.example.com/my-suburl/sub-dept/xx-xxxx-xx-yyyyyy/

我试图找到'yyyyy'在url到目前为止,我有:

(.*)'/sub-dept'/(.*[^'/])'/([^'/]*)$

匹配:

https://www.example.com/my-suburl

xx-xxxx-xx-yyyyyy

然而,就像我说的,我需要'yyyyy'特定的匹配

部分url的正则表达式

非#的解决方案

如果xx是实际字符串中的数字,则使用

'd+(?='/$)

否则,使用

[^-'/]*(?='/?$)

参见演示1和演示2

请注意,在JS中没有后视,因此,如果你必须检查/sub-dept/是否在你需要的子字符串前面,你将不得不依赖捕获组机制:

'/sub-dept'/[^'/]*-([^-'/]*)'/?

查看另一个演示

原始回答

这是一个正则表达式,你可以使用

(?<=/sub-dept/[^/]*-)[^/-]*(?=/$)

看到演示

regex匹配包含0个或多个字符的子字符串,而不是/-,该子字符串为…

  • (?<=/sub-dept/[^/]*-)前面有/sub-dept/,后跟除/以外的1个或多个字符,然后是连字符
  • (?=/$) -在字符串的末尾后跟/符号。

或者,有一种非正则表达式的方法:通过/拆分字符串,获得最后一部分并通过-拆分。下面是一个示例(为了演示,没有错误/null检查):

var result = text.Trim('/').Split('/').LastOrDefault().Split('-').LastOrDefault();