如何使用 javascript 正则表达式替换 URL 的主机部分

Posted

技术标签:

【中文标题】如何使用 javascript 正则表达式替换 URL 的主机部分【英文标题】:How to replace host part of a URL using javascript regex 【发布时间】:2017-05-25 17:53:51 【问题描述】:

如何使用 javascript 正则表达式替换 URL 的 主机部分。这可以是带有或不带有 http 的任何类型的 URL。假设此文本来自 json 文件的内容。

旧文本:


   "auth" : 
     "login" : "http://local.example.com:85/auth/signin",
     "resetpass" : "http://local.example.com:85/auth/resetpass",
     "profile" : "http://local.example.com/auth/profile"
   

期待这样的解决方案:

var NewText = OldText.replace (/(some regex)/g, 'example.com');

获取 NewText 为:


  "auth" : 
     "login" : "http://example.com:85/auth/signin",
     "resetpass" : "http://example.com:85/auth/resetpass",
     "profile" : "http://example.com/auth/profile"
    

我找到了相同的 here,但该正则表达式在 javascript 中不起作用。

注意:我正在寻找正则表达式。

【问题讨论】:

您是否特别需要使用正则表达式?如果您需要从 javascript 更新 url,您可能会重新分配 window.location.host。 Reference 【参考方案1】:

您可以使用 URL 功能并设置新的主机名:

var oldUrl = "http://host1.dev.local:8000/one/two";
var url = new URL(oldUrl);
url.hostname = 'example.com';
url.href //'http://example.com:8080/one/two'

【讨论】:

Edge、IE 11 和 Safari 不支持此功能【参考方案2】:

这可以通过以下方式轻松实现:

var NewText = OldText.replace (/(https?:\/\/)(.*?)(:*)/g, '$1' + 'example.com' + '$3'); 

欢迎您使用最佳实践来修改它。

【讨论】:

我认为正确的正则表达式模式应该是:/(https?:\/\/)(.*?)(\/.*)/g【参考方案3】:

我认为使用正则表达式是完全可行的。 这是给你的一个小sn-p,如果你想添加其他东西,请告诉我。

var urls = [
    
      url: "http://local.something.com:85/auth/signin"
    , 

    
      url: "local.anything.com/auth/profile"
    
];
for(var i in urls) 
  var newUrl = urls[i].url.replace(/(http:|)(^|\/\/)(.*?\/)/g, 'https://example.com/');
  console.log(newUrl);

我假设,来自

没有http

,你的意思是“google.com”之类的东西

【讨论】:

以上是关于如何使用 javascript 正则表达式替换 URL 的主机部分的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中使用正则表达式转换标记 (\u \l \U \L \E)?

如何替换 Javascript 中的正则表达式子字符串匹配?

JavaScript 替换/正则表达式

javascript正则表达式如何替换一个字符串的两头固定字符

使用正则表达式(regex)替换jQuery / JavaScript中的选定文本

在 Javascript 中用大写替换正则表达式捕获组