1

我的问题是我试图从 url 中提取某些内容。我目前正在使用

window.location.href.substr()

抓取类似“/localhost:123/list/chart=2/view=1”的东西

我现在拥有的是使用索引定位来获取图表并查看值。

var chart = window.location.href.substr(-8);
var view = window.location.href.substr(-1);

但问题在于我有 10 个或更多图表。定位乱了 有没有办法让代码获取“chart=”和最接近的“/”之间的字符串?

4

3 回答 3

3
var str = "/localhost:123/list/chart=2/view=1";
var data = str.match(/\/chart=([0-9]+)\/view=([0-9]+)/);
var chart = data[1];
var view = data[2];

当然,您可能希望在使用匹配结果之前添加一些验证检查。

受 Paul S 的启发。我写了一个函数版本的答案:

function getPathVal(name)
{
    var path = window.location.pathname;
    var regx = new RegExp('(?:/|&|\\?)'+name+'='+'([^/&,]+)');
    var data = path.match(regx);
    return data[1] || null;
}
getPathVal('chart');//2

函数应该适用于从 URI 中的标准 get 参数语法或示例 URI 中的语法获取参数

于 2013-07-23T13:59:06.830 回答
2

这是一种使用方法String.prototype.indexOf

function getPathVar(key) {
    var str = window.location.pathname,
        i = str.indexOf('/' + key + '=') + key.length + 2,
        j = str.indexOf('/', i);
    if (i === key.length + 1) return '';
    return str.slice(i, j);
}
// assuming current path as described in question
getPathVar('chart');
于 2013-07-23T14:00:54.487 回答
1

您可以将字符串拆分,使用“/”作为分隔符,然后遍历结果数组以找到所需的参数。这样您就可以轻松地自动提取所有参数:

var x =  "/localhost:123/list/chart=2/view=1";

var res = {};
var spl = x.split("/");
for (var i = 0; i < spl.length; i++) {
    var part = spl[i];
    var index = part.indexOf("=");
    if (index > 0) {
        res[part.substring(0, index)] = part.substring(index + 1);
    }
}

console.log(res);
// res = { chart: 2, view: 1}

小提琴

于 2013-07-23T14:11:47.610 回答