如何从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&amp;p2=9&amp;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中的slice()方法

如何从 JavaScript 中的字符串中提取基本 URL?

如何从javascript中的rgb字符串中提取颜色值[重复]

JavaScript中如何提取字符串?

python中如何从字符串中提取数字?

JavaScript slice() 方法