Javascript 使用不同的端口更新URL字符串

Javascript 使用不同的端口更新URL字符串,javascript,regex,node.js,Javascript,Regex,Node.js,在我的程序中,我得到了如下格式的URL, 当我使用url.parse时,什么都没有发生,我需要更改端口,它建议如何做 端口位于冒号%3 55123之后,我需要将其更改为8080 http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app 号码可以更改(任何有效端口),因此我无法使用替换 顺便说一句,有一个解析器可以将格式从%3更改为冒号,将%2F更改为斜杠,作为标准URL输出?在解析它之前

在我的程序中,我得到了如下格式的URL, 当我使用url.parse时,什么都没有发生,我需要更改端口,它建议如何做

端口位于冒号%3 55123之后,我需要将其更改为8080

  http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app
号码可以更改(任何有效端口),因此我无法使用替换


顺便说一句,有一个解析器可以将格式从%3更改为冒号,将%2F更改为斜杠,作为标准URL输出?

在解析它之前,必须对其进行解码。您可以使用内置的
decodeURIComponent
功能执行此操作

var url = require('url');

var encodedUrl = 'http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app';

var decodedUrl = decodeURIComponent(encodedUrl);
//=> 'http://mo-de73.mo.bmw.corp:55123/login/callback&client_id=s2.app'

var parts = url.parse(decodedUrl);
/* =>
  { protocol: 'http:',
    slashes: true,
    auth: null,
    host: 'mo-de73.mo.bmw.corp:55123',
    port: '55123',
    hostname: 'mo-de73.mo.bmw.corp',
    hash: null,
    search: null,
    query: null,
    pathname: '/login/callback&client_id=s2.app',
    path: '/login/callback&client_id=s2.app',
    href: 'http://mo-de73.mo.bmw.corp:55123/login/callback&client_id=s2.app' }
*/

parts.port = 8080;
//=> 8080

delete parts.host;
//=> true

url.format(parts);
//=> 'http://mo-de73.mo.bmw.corp:8080/login/callback&client_id=s2.app'
最后一部分是一个小技巧。更新
端口
后,您的
部件
对象将如下所示

{
  // ...
  host: 'mo-de73.mo.bmw.corp:55123',
  port: '8080',
  hostname: 'mo-de73.mo.bmw.corp',
  // ...
}
主机名
是正确的,但是
主机
中仍然有硬编码的端口。如果您只是使用
delete parts.host
删除主机,
url.format
将使用
{hostname}:{port}
自动创建正确的主机

也许有更好的方法,但至少这会让你开始。

试试这个

var url="http%3A%2F%2Fmo-de73.mo.bmw.corp%3A55123%2Flogin%2Fcallback&client_id=s2.app";
url=url.replace('%3A55123',":8080");
var decodedUrl = decodeURIComponent(url);
//decodedUrl=http://mo-de73.mo.bmw.corp:8080/login/callback&client_id=s2.app

非常感谢1+你能提供我如何更新端口的示例吗?非常感谢,在我更新端口后的最后一个问题,我想再次使用URL(使用更新的端口)如何执行?端口仅在对象部分发生了更改。端口,我需要以某种方式使用新端口获取更新的URL,有办法做到这一点吗?