【问题标题】:How do I replace the port number in JavaScript?如何替换 JavaScript 中的端口号?
【发布时间】:2014-09-11 09:44:43
【问题描述】:

我有一个字符串数组,我想创建一个包含相同字符串但没有端口号的新数组(端口号是“:”后跟一个数字)。例如,如果字符串是“http://www.example.com:8080/hello/”,那么它应该被替换为“http://www.example.com/hello/”。我如何在 JavaScript 中做到这一点?我需要它来调用 safari.extension.addContentScriptFromURL 因为白名单不能包含端口号。如果可能,最好只在第二个和第三个斜杠之间替换端口号,而字符串的其余部分保持不变。

【问题讨论】:

标签: javascript


【解决方案1】:

您不需要任何库或正则表达式

https://developer.mozilla.org/en-US/docs/Web/API/URL

var url = new URL('http://localhost:8080');
url.port = '';
console.log(url.toString());

问候

【讨论】:

【解决方案2】:

一个非常好的方法是创建一个a 元素,并将您拥有的URL 分配为href - 因为the HTMLAnchorElement interface implements URLUtils,因此支持以相同的方式访问地址的各个部分location 对象确实如此,您也可以单独设置它们:

var foo = document.createElement("a");
foo.href = "http://www.example.com:8080/hello/";
foo.port = ""
var newURL = foo.href;
console.log(newURL); // output: http://www.example.com/hello/

http://jsfiddle.net/pdymeb5d/

【讨论】:

    【解决方案3】:

    这应该可以满足你的需求:

    var newUrls = urls.map(function (url) {
        return url.replace(/([a-zA-Z+.\-]+):\/\/([^\/]+):([0-9]+)\//, "$1://$2/");
    });
    

    编辑:似乎 URI 的架构部分可以包含“+”、“。”并且。相应地更改了正则表达式。

    见:https://en.wikipedia.org/wiki/URI_scheme

    【讨论】:

      【解决方案4】:

      您可以将正则表达式与 string.replace() 一起使用,如下所示,

      var text = "http://www.example.com:8080/hello/";
      var withNoDigits = text.replace(/[0-9]/g, '');
      var outputString = withNoDigits.replace(/:([^:]*)$/,'$1');
      alert(outputString);
      

      【讨论】:

      • 域可能包含数字。
      【解决方案5】:
          function parseURL(url) {
              var parser = document.createElement('a'),
                  searchObject = {},
                  queries, split, i;
              parser.href = url;
      
              queries = parser.search.replace(/^?/, '').split('&');
              for( i = 0; i < queries.length; i++ ) {
                  split = queries[i].split('=');
                  searchObject[split[0]] = split[1];
              }
              return {
                  protocol: parser.protocol,
                  host: parser.host,
                  hostname: parser.hostname,
                  port: parser.port,
                  pathname: parser.pathname,
                  search: parser.search,
                  searchObject: searchObject,
                  hash: parser.hash
      
      
       };
      }
      

      使用它来解析任何 URL 并以您喜欢的格式排列。

      【讨论】:

        【解决方案6】:

        好的,我使用了你的答案并稍作更改,因为协议也可能包含破折号:

        var newUrls = urls.map(function(url) {
            return url.replace(/([^\/\:]+):\/\/([^\/]+):([0-9]+)\//, "$1://$2/");
        })
        

        【讨论】:

          【解决方案7】:

          我在这里找到了最佳解决方案。

          var url = 'http://localhost:7001/www.facebook.com'; // Create a regex to match protocol, domain, and host var matchProtocolDomainHost = /^.*\/\/[^\/]+:?[0-9]?\//i; // Replace protocol, domain and host from url, assign tomyNewUrl var myNewUrl = url.replace(matchProtocolDomainHost, ''); 现在 myNewUrl === 'www.facebook.com'。

          最好阅读整页。 remove hostname and port from url using regular expression

          【讨论】:

            猜你喜欢
            • 2011-01-22
            • 2010-12-03
            • 2013-05-03
            • 1970-01-01
            • 1970-01-01
            • 2015-11-22
            • 2010-10-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多