用于获取Javascript中URL组件的正则表达式

用于获取Javascript中URL组件的正则表达式,javascript,regex,Javascript,Regex,我一直不善于使用正则表达式,但我认为现在我有一个合理的需求,我不确定是否有可能使用它们来实现它 我想要一个正则表达式,它在执行时返回给定URL的所有组件它不用于验证格式:前提是传递了正确的URL(通常是location.href) 所需组件包括: 计划 领域 端口(可选) 路径 查询字符串 奖金: 分别查询字符串参数 碎片 用户/密码 示例: /regex/.exec('http://www.stackoverflow.com/questions/1/regex-for-getting-

我一直不善于使用正则表达式,但我认为现在我有一个合理的需求,我不确定是否有可能使用它们来实现它

我想要一个正则表达式,它在执行时返回给定URL的所有组件它不用于验证格式:前提是传递了正确的URL(通常是
location.href

所需组件包括:

  • 计划
  • 领域
  • 端口(可选)
  • 路径
  • 查询字符串
奖金:

  • 分别查询字符串参数
  • 碎片
  • 用户/密码
示例:

/regex/.exec('http://www.stackoverflow.com/questions/1/regex-for-getting-url-components-in-javascript') --> ["http://stackoverflow.com/questions/30868359/regex-for-getting-url-components-in-javascript“,”http“,”www.stackoverflow.com“,”未定义“,”获取javascript中url组件的问题/30868359/regex”]

/regex/.exec('https://localhost:8080/?a=1&b=2') --> ["http://www.stackoverflow.com/questions/1/regex-for-getting-url-components-in-javascript“,“https”,“localhost”,“8080”,“a=1&b=2”]


编辑:

为了澄清,我需要的是一个小代码,它创建一个表示URl的对象。然后我必须能够修改组件,如参数、模式等,并以字符串形式再次获得结果。好吧,我不能用本地位置对象来做这件事,但我一定错了


代码的大小必须特别小,因为这必须在页面的页眉中同步加载。它有可能最终被复制到每个页面,而不是作为外部文件包含。因此,首先,我不喜欢依赖外部依赖关系。

基本思想是不使用正则表达式获取部件

函数解析url(url){
var a=document.createElement(“a”);
a、 href=url;
var obj={};
var parts=['protocol','hostname','host','pathname','port','search','hash','href'];
零件。forEach(功能(val){
obj[val]=a[val]
});
返回obj;
}
console.log(解析URL(“http://localhost:8080/foo?bar=1"));

console.log(解析URL(“http://www.example.com#test"));现代浏览器正是为此目的支持:

url=新url('http://www.stackoverflow.com/questions/1/regex-for-getting-url-components-in-javascript')
document.write(“+JSON.stringify(url,null,3))
明白了,我想:

var regex=/([a-zA-Z]+?)\:\//(.+?)\:([\d]+?)?\/(.+?)?\/(;
var url='1〕http://www.example.com/path/morePath/PathHere/?version=1#hashHash';
var url2=http://localhost:8080/?test=1';
log(regex.exec(url));
正则表达式=/([a-zA-Z]+?)\:\/\/(.+?)\:([\d]+?)?\/(.+?)?\/(;

log(regex.exec(url2))位置
对象仅包含当前页面的URL。如果您想使用任何其他URL,它是无用的。@arco444:在我的特殊情况下,我需要从当前URL(有时是另一个URL)获取数据并修改某些部分。不幸的是,这必须在同步加载的javascript中完成,因此如果可以用单个正则表达式完成,我不希望依赖库。“不幸的是,这必须在同步加载的javascript中完成,所以我不希望依赖库”-“库”的任何内容都不意味着“异步”有趣。我不知道URL对象,但不是所有浏览器都支持它。你的链接中包含了一些正则表达式,这正是我想要的。正如你所说,这并不完全是我想要的,但我不知道这个选项。这将是我解决方案的一部分。谢谢