我正在尝试使用正则表达式从网址中获取一些值。由于我不熟悉,我希望有人可以指导我。
我有一个网址,我试图操纵这样的样子。
var urlString = "/myMessages/v2/messages/I15/parts/0"
我想要得到的值是I15和0。 这些值可以是任何东西,但urlString的格式将保持不变。获得这些价值的最佳和最有效的方法是什么?
答案 0 :(得分:2)
我建议使用比目前提出的解决方案更强大的解决方案:
var urlString = "<url string coming in some undetermined order>";
var parts = urlString.split('/');
var map = {};
for (var i = 0; i < parts.length; i += 2) {
map[parts[i]] = parts[i+1];
}
通过这种方式,您的值与关键值一起存储,您可以以任何方式设置它们。
所以说你的网址是/myMessages/v2/partnum/2/messages/I18/thing/splund/foo/bar
,你想要partnum
,thing
和foo
的值,但你不一定知道他们&# 39;按照我刚刚放在那个网址中的顺序。使用我建议的方法,您可以使用以下方法访问它们的值:
var partnum = map['partnum'] // '2'
var thing = map['thing'] // 'splund'
var foo = map['foo'] // 'bar'
答案 1 :(得分:2)
我不确定我会使用正则表达式。我会创建一个自定义函数来处理这种类型的URL:
function handleUrlTokens(url){
var parts = url.split('/').filter(function(o){return o!==''})
var params = {};
for (var i = 0; i < parts.length; i+=2) {
param[parts[i]] = parts[i+1];
}
return params;
}
handleUrlTokens("/myMessages/v2/messages/I15/parts/0") //Object {myMessages: "v2", messages: "I15", parts: "0"}
这样就可以处理许多不同类型的url,只要约定是/ key / value / key / value。
编辑,因为revenProdigalKnight的循环比我的好。
答案 2 :(得分:1)
对于这个简单的事情,一个简单的解决方案是改为使用split
:
var urlString = "/myMessages/v2/messages/I15/parts/0";
var parts = urlString.split('/');
var value1 = parts[4]; // "I15"
var value2 = parts[6]; // "0"
只要您确切知道在您感兴趣的部分之前会出现多少/
个字符,这样就可以正常工作。
如果您也知道该网址始终以"/myMessages/v2/messages/"
开头,那么您可以提高效率:
var urlString = "/myMessages/v2/messages/I15/parts/0";
var substring = urlString.substr(24),
i = substring.indexOf('/'),
j = substring.indexOf('/', i);
var value1 = substring.substr(0, i); // "I15"
var value2 = substring.substr(j + 1); // "0"
然而,效率确实不应该是您的首要任务。您应该优化可读性。
答案 3 :(得分:0)
\/messages\/([^\/]+)\/parts\/(.*)
然后使用第一个和第二个匹配的组。
答案 4 :(得分:0)
var first = urlString.split('/')[4];
var second = urlString.split('/')[6];
请注意,如果订单已更改,则无法使用此功能。
答案 5 :(得分:0)
var urlString = "/myMessages/v2/messages/I15/parts/0"
var reqArray = urlString.split('/');
console.log(reqArray[4],reqArray[6]);
与正则表达式相比,这是更好的方法。
它适用于我!!