我如何使用 Regex 从 URL 获取 PATH?

How i can get PATH from URL with Regex?

也许有人可以帮我解决这个正则表达式?

.*\:\/\/(?:www.)?([^\/]+)(\/.+")

我需要从 URL 获取所有路径。我试过了,但我不能只匹配没有引号的路径

https://regex101.com/r/J6nILD/6

您可以通过 Groovy 代码使用 JSR223 采样器获取路径。

  1. 声明/获取URL变量

  1. 解析 URL 以获得协议、主机、端口和路径。使用JSR223 Sampler,将以下代码粘贴到脚本区

    URL url1 = new URL(vars.get('url'));
    
    vars.put('protocol', url1.getProtocol());
    vars.put('host', url1.getHost());
    vars.put('port', url1.getPort() as String);
    vars.put('path', url1.getPath());
    vars.put('query', url1.getQuery());
    
  2. 使用 ${}

  3. 在脚本中的任何位置使用该变量

如果您必须先扫描 URL:

我已尝试提供一个可能适用于您的上下文的简单正则表达式(过于简化),但您可能必须修改它以提供一些额外的上下文。例如,x 是一个有效路径,这个正则表达式将识别它。但是,如果您尝试在 <img src="x"> 等字符串中查找路径,它也会将 img 识别为有效的 url 路径。在那种情况下,您可能想要:

/<img\s+src="((https?|ftp):\/\/[^\/]+)?(\/?[^?#\s"]*)/i

var regex = /\b((https?|ftp):\/\/[^\/]+)?(\/?[^?#\s]*)\b/i;
var s = 'http://example.com/a/b?x=1';
var result = regex.exec(s);
console.log(result[3]);

如果 URL 的协议和主机部分始终存在,那么通过使协议和主机不是可选的,在几乎任何上下文中区分 URL 变得更容易:

/\b((https?|ftp)://[^/]+)(/?[^?#\s]*)\b/i;

你可以选择类似的东西:

(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?

演示:

更多信息: