解析包含两个URL字符串的URL

时间:2015-08-19 13:49:16

标签: javascript node.js url express

我有节点应用,我在下面的网址中输入了一些标题,我需要解析它并将3000的内容更改为4000,我怎么能这样做,因为我得到& #34; 2" req.headers.location

中的网址

" http://to-d6faorp:51001/oauth/auth?response_type=code&redirect_uri=http%3AF%2Fmo-d6fa3.ao.tzp.corp%3A3000%2Flogin%2Fcallback&client_id=x2.node"

问题是我不能只使用替换,因为值可以改变(动态值,现在它的3000以后可以是任何值......)

2 个答案:

答案 0 :(得分:0)

如果您需要更改的URL部分将成为redirect_uri的参数,那么您只需找到其后的第二个%3A的索引。

Javascript indexOf有第二个参数,即'开始位置',所以你可以先做一个indexOf'redirect_uri ='字符串,然后将该位置传递给你下次调用indexOf来寻找第一个'%' 3A'然后将结果传递给你的'3000'之前的%3A的下一个电话。一旦你有你正在寻找的令牌的位置你应该能够通过使用子串建立一个新的字符串...第一个子串将在你的第二个%3A的末尾,第二个子串将来自索引之后的%2F。

基本上,你将通过切割字符串来构建字符串:

http://to-d6faorp:51001/oauth/auth?response_type=code&redirect_uri=http%3AF%2Fmo-d6fa3.ao.tzp.corp%3A

“%2Flogin%2Fcallback&安培; CLIENT_ID = x2.node”

...并附加在您尝试输入的任何端口号中。

希望这有帮助。

此代码可以满足您的需求:

var strURL = "http://to-d6faorp:51001/oauth/auth?response_type=code&redirect_uri=http%3AF%2Fmo-d6fa3.ao.tzp.corp%3A3000%2Flogin%2Fcallback&client_id=x2.node";

var strNewURL = strURL.substring(0,strURL.indexOf("%3A", strURL.indexOf("%3A", strURL.indexOf("redirect_uri") + 1) + 1) + 3) + "4000" + strURL.substring(strURL.indexOf("%2F",strURL.indexOf("%3A", strURL.indexOf("%3A", strURL.indexOf("redirect_uri") + 1) + 1) + 3));

答案 1 :(得分:0)

将返回字符串拆分为参数:

var parts = req.headers.location.split("&");

然后将部分拆分为fieldname和variable:

var subparts = [];
for (var i = 1; i < parts.length; i++)
    subparts[i] = parts[i].split("=");

然后检查哪个fieldname等于redirect_uri

var ret = -1;
for (var i = 0; i < subparts.length; i++)
    if (subpart[i][0] == "redirect_uri")
        ret = i;

if (ret == -1)
    // didnt find redirect_uri, somehow handle this error

现在您知道哪个子部分包含redirect_uri

因为我不知道您的redirect_uri遵循哪些规则,我无法告诉您如何获取价值,这就是您的任务,但问题已被隔离到subparts[ret][1]。那是包含redirect_uri的字符串。