正则表达式url获取路径名

时间:2017-09-26 13:27:12

标签: javascript regex

我如何在javascript中获取主机名后的所有内容?

到目前为止,这是我的正则表达式,但我现在需要在从第一个/开始直到字符串结束时捕获。

https?\:\/\/(.*)

字符串

http://www.myurl.com/en/country/belgium/

因此对于我需要捕获的字符串:

/ EN /国家/比利时/

即使在阅读了正则表达式后,如果有人花了几分钟时间为我提供一个非常好的例子,我一直在玩弄这个例子。

修改

要明确我在这里使用document.referrer,据我所知,document.location之类的帮助没有这样做。

7 个答案:

答案 0 :(得分:3)

您应该使用var url = new URL('http://www.myurl.com/en/country/belgium/'); console.log(url.pathname); // /en/country/belgium/ url; /* URL { hash: "", host: "www.myurl.com", hostname: "www.myurl.com", href: "http://www.myurl.com/en/country/belgium/", origin: "http://www.myurl.com", password: "", pathname: "/en/country/belgium/", port: "", protocol: "http:", search: "", searchParams: URLSearchParams {}, username: "" } */ 类:

var url = new URL("http://www.myurl.com/en/country/belgium/");
console.log(url.pathname);

更多信息:https://developer.mozilla.org/en-US/docs/Web/API/URL

答案 1 :(得分:2)

由于您需要在字符串中解析网址,因此可以使用正则表达式。

逻辑:

  • 开始与http[s]*匹配。这将检查httphttps
  • 然后检查://
  • 现在您必须匹配主机名。为此,您可以搜索下一个/并接受其后的任何内容。

var str = 'http://www.myurl.com/en/country/belgium/';
var pathNameRegex = /http[s]*:\/\/[^\/]+(\/.+)/;
var matches = str.match(pathNameRegex);
console.log(matches[1]);

答案 2 :(得分:2)

使用网址对象。

URL

更新: 使用锚标记来填充URL(我不确定这是if (typeof URL === 'undefined') { var URL = function(url) { var a = document.createElement('a'); a.href = url; return a; } } var url = new URL('https://www.example.com/pathname/'); var path = url.pathname; 所做的每一次的完整填充,但应该足够你的任务):

def left_truncnorm_logpdf(x, untruncated_mean, untruncated_std_dev, left_cutoff):
    f = np.array(np.subtract(stats.norm.logpdf(x, loc=untruncated_mean, scale=untruncated_std_dev),
                             np.log(1 - stats.norm.cdf(left_cutoff, loc=untruncated_mean, scale=untruncated_std_dev))))
    f[x < left_cutoff] = -np.inf
    return f

答案 3 :(得分:1)

只需创建一个锚点,让浏览器解析它。随处可见

var a  = document.createElement('a');
a.href = 'http://www.myurl.com/en/country/belgium/'; // or document.referrer

var path = a.pathname;

console.log(path);

答案 4 :(得分:0)

如果没有正则表达式,您可以使用以下内容:

var pathArray = location.href.split( '/' );
var protocol = pathArray[0];
var host = pathArray[2];
var baseUrl = protocol + '//' + host;
var nonBaseUrl = window.location.href.replace(baseUrl, '');

答案 5 :(得分:0)

您可以通过简单的替换来实现这一目标。

var url = 'http://www.myurl.com/en/country/belgium/';
var path = url.replace(/https?:\/\/[^\/]+/g,'');

console.log(path);//prints /en/country/belgium/

但是如果你想捕获路径,你可以使用与捕获组相同的正则表达式

var url = 'http://www.myurl.com/en/country/belgium/';

var regex =  /https?:\/\/[^\/]+(.*)/g;
var match = regex.exec(url);
  
console.log(match[1]); //prints /en/country/belgium/

答案 6 :(得分:-1)

我建议:

/https?:\/\/[^\s\/]*(\/\S*)/

[^\s\/]是一个排除空格和斜杠的字符类。

\S是一个速记字符类,匹配除空格之外的所有字符。

请注意,:不是特殊字符,不需要转义。