我需要一个函数来只获取空的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;
}
它有效,但看起来很难看......有没有更好的方法呢?任何帮助表示赞赏。
答案 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;
}