如何从javascript中的字符串中提取参数(指定的模式字符串)
Posted
技术标签:
【中文标题】如何从javascript中的字符串中提取参数(指定的模式字符串)【英文标题】:how to extract parameter(specified pattern string) from string in javascript 【发布时间】:2015-06-24 08:15:50 【问题描述】:我需要从 url 路径中提取参数名称。 参数在 内或跟随第一个?(问号)或跟随 & 网址中的标记。
需要提取的url路径是这样的格式:
/tt/pa/pb/?p1=9888&p2=9&p3=98
因此参数为pa
,pb
,p1
,p1
,p3
【问题讨论】:
我不认为你可以通过一次匹配获得所有参数 Getting all URL parameters using regex 的可能重复项 @oliveromahony OP 想要的不仅仅是 URL 参数,但绝对可以成为解决方案的一部分。 哦,对不起 - 没有完整阅读! 我考虑了建议的 RFC6570 风格的 URI 解析器,但是你不能混合有和没有具体值的变量(即它们可以解析示例中的路径参数,但它们不能解析查询字符串变量原样) 【参考方案1】:我能想到的最快的方法是:
[?&][^=]+
Debuggex Demo
现在我还要捕获它前面的 或
?
或 &
字符,所以你必须在之后将其切断:
var inp = '/tt/pa/pb/?p1=9888&p2=9&p3=98'
var found = inp.match(/[?&][^=]+/g).map(function(p) return p.substring(1); );
document.write(found.join('<br />'));
如果您期望 /tt/pa=/pb/?p1=9888&p2=9&p3=98
之类的东西,其中 pa=
是一个有效的参数名称和/或 9888
是一个有效值,那么您就有麻烦了。但我怀疑这是一个严重的限制。
【讨论】:
【参考方案2】:从路径中分别提取搜索变量和变量的简单示例:
function extractSearch(search)
var result = ;
search = search || window.location.search;
if (search.length)
search = search.substr(1).split('&');
for (var i = 0; i < search.length; i++)
search[i] = search[i].split('=');
result[decodeURIComponent(search[i][0])] = decodeURIComponent(search[i][1]);
return result;
function extractFromPath(pattern, url)
var keys = [],
result = ,
i;
url = url || window.location.pathname;
pattern = pattern.replace(/([^]+)/g, function($0, $1)
keys.push($1);
return '([^/]+)';
);
pattern = url.match(new RegExp('^' + pattern));
for (i = 0; i < keys.length; i++)
result[keys[i]] = pattern[i + 1];
return result;
使用示例:
// Object a: "10", b: "20"
extractSearch('?a=10&b=20');
// Object pa: "1", pb: "2"
extractFromPath('/tt/pa/pb', '/tt/1/2/?p1=9888&p2=9&p3=98');
最终你可以通过以下方式组合它:
function getParameters(pattern, path)
var result,
tmp;
path = path.split('?');
result = extractFromPath(pattern, path[0]);
if (path[1] !== void 0)
tmp = extractSearch('?' + path[1]);
for (var param in tmp)
result[param] = tmp[param];
return result;
// Object pa: "1", pb: "2", a: "10", b: "20"
getParameters('/tt/pa/pb', '/tt/1/2?a=10&b=20');
【讨论】:
以上是关于如何从javascript中的字符串中提取参数(指定的模式字符串)的主要内容,如果未能解决你的问题,请参考以下文章
如何从 JavaScript 中的字符串中提取基本 URL?