Javascript 如何匹配url中以querystring结尾的文件扩展名?
我只想将以下所有URL中的文件扩展名匹配到问号。所以URL#4将匹配“file.pdf”中的pdf,而不是“otherfile.exe”中的“exe” 我该怎么做 我试过这个,但不起作用:Javascript 如何匹配url中以querystring结尾的文件扩展名?,javascript,php,regex,Javascript,Php,Regex,我只想将以下所有URL中的文件扩展名匹配到问号。所以URL#4将匹配“file.pdf”中的pdf,而不是“otherfile.exe”中的“exe” 我该怎么做 我试过这个,但不起作用: ([^\.]+)(\?|[^\?]$)+ 这将是我将使用的版本 /\w+\.[A-Za-z]{3,4}(?=\?|$)/ 以下是一个工作版本: 使用“向前看”与其中之一?或者字符串的结尾(?=\?|$)然后可以匹配它后面的内容 $re = "/\\w+\\.[A-Za-z]{3,4}(?=\\?|$)/
([^\.]+)(\?|[^\?]$)+
这将是我将使用的版本
/\w+\.[A-Za-z]{3,4}(?=\?|$)/
以下是一个工作版本:
使用“向前看”与其中之一?或者字符串的结尾(?=\?|$)
然后可以匹配它后面的内容
$re = "/\\w+\\.[A-Za-z]{3,4}(?=\\?|$)/";
$str = "http://www.someplace.com/directory/file.pdf?other=true&more=false&value=otherfile.exe\n\n";
preg_match($re, $str, $matches);
这将是我将使用的版本
/\w+\.[A-Za-z]{3,4}(?=\?|$)/
以下是一个工作版本:
使用“向前看”与其中之一?或者字符串的结尾(?=\?|$)
然后可以匹配它后面的内容
$re = "/\\w+\\.[A-Za-z]{3,4}(?=\\?|$)/";
$str = "http://www.someplace.com/directory/file.pdf?other=true&more=false&value=otherfile.exe\n\n";
preg_match($re, $str, $matches);
要匹配,请尝试此不区分大小写的函数:
function matchURLs($desiredURL, $compareURL){
$url = parse_url($compareURL);
if(preg_match('/^'$url['scheme'].'://'.$url['host'].$url['path'].'$/i', $desiredURL)){
return true;
}
return false;
}
matchURLs('http://www.someplace.com/directory/file.pdf', 'http://www.someplace.com/directory/file.exe'); // false
matchURLs('http://www.someplace.com/directory/file.pdf', 'http://www.someplace.com/directory/file.pdf?value=file.exe'); // true
要在?
之前获取以下信息:
function URL_before_query($url){
$u = parse_url($url);
return $u['scheme'].'://'.$u['host'].$u['path'];
}
echo URL_before_query('http://www.someplace.com/directory/file.pdf?other=true&more=false&value=otherfile.exe'); // http://www.someplace.com/directory/file.pdf
要匹配,请尝试此不区分大小写的函数:
function matchURLs($desiredURL, $compareURL){
$url = parse_url($compareURL);
if(preg_match('/^'$url['scheme'].'://'.$url['host'].$url['path'].'$/i', $desiredURL)){
return true;
}
return false;
}
matchURLs('http://www.someplace.com/directory/file.pdf', 'http://www.someplace.com/directory/file.exe'); // false
matchURLs('http://www.someplace.com/directory/file.pdf', 'http://www.someplace.com/directory/file.pdf?value=file.exe'); // true
要在?
之前获取以下信息:
function URL_before_query($url){
$u = parse_url($url);
return $u['scheme'].'://'.$u['host'].$u['path'];
}
echo URL_before_query('http://www.someplace.com/directory/file.pdf?other=true&more=false&value=otherfile.exe'); // http://www.someplace.com/directory/file.pdf
您是否尝试过使用PHP的
parse_url()
?我不确定您是否只想知道是否存在匹配项,或者是否需要字符串中的主机和路径。请指定。您是否尝试过使用PHP的parse_url()
?我不确定您是否只想知道是否存在匹配项,或者是否需要字符串中的主机和路径。请指定。遗憾的是,它与本例中“.”中的过早匹配:http://www.com.com/something/sampson.masterplan.pdf?sdf
它将与“masterplan.pdf”相匹配。有办法解决这个问题吗?(另外,我添加了0-9
,这样它就可以匹配mp3)我将它稍微更改为:/\w+\([A-Za-z0-9]{3,4})(?=\?|$)/
,不幸的是,它从一个“.”开始就匹配了。在这种情况下:http://www.com.com/something/sampson.masterplan.pdf?sdf
它将与“masterplan.pdf”相匹配。有办法解决这个问题吗?(另外,我添加了0-9
,这样它就可以匹配mp3了)我将它稍微修改为:/\w+\([A-Za-z0-9]{3,4})(?=\?|$)/