在工作之后得到一个字符串

时间:2017-08-11 11:58:10

标签: javascript

我有一个字符串如下,或者它可以是类似的东西:

http://localhost:3003/?sp-tk=A8FEE0A4AFD2A086277CC79449AD69E5D34734455900AEED7C0A7C77EC580187D9D2FE1B286F7B5989B421B27E6FE2D1CAD2CCEB4372A80FFF6DC5D1AC6E246DB3BBAD7EB8DD7DAD1C5ED79A2114F0E3A036E898287021ABEFE642F74FAE5372E6525E0C54732B7EA9691F84C27EEB6AE60029B7613B68DA8DA3AE69887F6E815EA0A3415F08C827AF21DBFB82AE7247B297F8CFAD0DD3F7D0ED81FC095375F6242CED940B2B55D8707BCB1D85E54CBB98E83CB8

我需要的是sp-tk之后的部分:

A8FEE0A4AFD2A086277CC79449AD69E5D34734455900AEED7C0A7C77EC580187D9D2FE1B286F7B5989B421B27E6FE2D1CAD2CCEB4372A80FFF6DC5D1AC6E246DB3BBAD7EB8DD7DAD1C5ED79A2114F0E3A036E898287021ABEFE642F74FAE5372E6525E0C54732B7EA9691F84C27EEB6AE60029B7613B68DA8DA3AE69887F6E815EA0A3415F08C827AF21DBFB82AE7247B297F8CFAD0DD3F7D0ED81FC095375F6242CED940B2B55D8707BCB1D85E54CBB98E83CB8

为此,我找到了如下代码:

function getTokenFromUrl() {
    name="sp-tk";
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/,
        "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return decodeURIComponent(results[1].replace(
            /\+/g, " "));
}

它有效。但我不明白正则表达式部分。任何人都可以了解这一点,如果有更简单的方法,也许更清洁实现这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用此代码(我认为此正则表达式更易于阅读):



    var myString = 'http://localhost:3003/?sp-tk=A8FEE0A4AFD2A086277CC79449AD69E5D34734455900AEED7C0A7C77EC580187D9D2FE1B286F7B5989B421B27E6FE2D1CAD2CCEB4372A80FFF6DC5D1AC6E246DB3BBAD7EB8DD7DAD1C5ED79A2114F0E3A036E898287021ABEFE642F74FAE5372E6525E0C54732B7EA9691F84C27EEB6AE60029B7613B68DA8DA3AE69887F6E815EA0A3415F08C827AF21DBFB82AE7247B297F8CFAD0DD3F7D0ED81FC095375F6242CED940B2B55D8707BCB1D85E54CBB98E83CB8'

    var myRegexp = /sp-tk=(.*?)(&|$)/;
    var match = myRegexp.exec(myString);
    var spTk = match[1]
    console.log(spTk);




正则表达式解释

  • sp-tk= =>找到以sp-tk =
  • 开头的字符串
  • (.*?) =>该字符串后面应跟有任何字符(非贪婪模式的表示)并用括号括起来,因为我们想要提取该部分的匹配。
  • &|$由于我们处于非贪婪模式,我们必须说明哪些字符。*?应该停止。

然后你得到索引1的匹配,因为0是整个匹配(包括sp-tk)


请注意,如果在sp-tk之前或之后还有其他url参数,则此正则表达式将起作用。