我有一个字符串如下,或者它可以是类似的东西:
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, " "));
}
它有效。但我不明白正则表达式部分。任何人都可以了解这一点,如果有更简单的方法,也许更清洁实现这一点?
答案 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参数,则此正则表达式将起作用。