如何获取空的href查询参数?

时间:2009-04-07 20:47:47

标签: javascript regex

我需要一个函数来只获取空的href查询参数名称,以便稍后可以用另一个数组中的值替换它们。经过几个小时的正则表达式失败后,我采取了以下措施:

/**
* getEmptyQueryParams(URL)
* Input: URL with href params
* Returns an array containing all empty href query parameters.
*/
function getEmptyQueryParams(URL)
{

    var params = new Array( );
    var non_empty_params = new Array( );
    var regex = /[\?&]([^=]+)=/g; // gets all query params
    var regex2 = /[\?&]([a-zA-Z_]+)=[\w]/g; // gets non empty query params 

    while( ( results = regex.exec( URL ) ) != null )
    {
        params.push( results[1] );
    }
    while( ( results = regex2.exec( URL ) ) != null )
    {
        non_empty_params.push( results[1] );
    }
    while(non_empty_params.length > 0)
    {
        for(y=0;y < params.length;y++)
        {
            if(params[y] == non_empty_params[0])
            {
                params.splice(y,1);
            }
        }
        non_empty_params.shift();
    }
    return params;
}

它有效,但看起来很难看......有没有更好的方法呢?任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:4)

我刚刚测试过,这可以在Opera和Chrom中使用,这是我现在打开的两个浏览器:

function getEmptyQueryParams(URL)
{
    var params = new Array();
    var regex = /[\?&]([^=]+)=(?=$|&)/g; // gets non empty query params
    while( ( results = regex.exec( URL ) ) != null )
    {
        params.push( results[1] );
    }

    return params;
}

答案 1 :(得分:0)

我想你可以用一个匹配空和填充参数的正则表达式来做到这一点。

var regex = /[\?&]([a-zA-Z_]+)=([\w]*)/g;

while( ( results = regex.exec( URL ) ) != null )
{
    if (results[2] == '')
        params.push( results[1] );
}

当然要进行测试。

答案 2 :(得分:0)

$parsedUrl = parse_url($url);
$query = $parsedUrl['query'];
$params = array();
parse_str($query, $params);

$emptyParamNames = array();
foreach ($params as $k=>$v) {
    if ($v === "")
        $emptyParamNames[] = $k;
}

编辑:

嘿......以为这是因为某种原因被标记为PHP。

好吧,也许有一天它会让某人受益:)

答案 3 :(得分:0)

function get_url_params($url) {
    $out = array();
    $parse = parse_url($url, PHP_URL_QUERY);
    if($parse) {
        foreach(explode('&', $parse) as $param) {
            $elems = explode('=', $param, 2);
            $out[$elems[0]] = $elems[1];
        }
    }
    return $out;
}

function get_empty_url_params($url) {
    $out = array();
    foreach(get_url_params($url) as $key => $value)
        if(empty($value))
            $out[] = $key;
    return $out;
}