我正在尝试创建一个小脚本来检测字符串输入是否是:
1) 一个 URL(将包含一个文件名):' http://ajax.googleapis.com/html5shiv.js '
2)只是一个文件名:'html5shiv.js'
到目前为止,我已经找到了这个,但我认为它只是检查 URL 和文件扩展名。有没有一种简单的方法可以使它使用“或”检查?我对 RegExp 不是很有经验。
var myRegExp = /[^\\]*\.(\w+)$/i;
先感谢您。
我正在尝试创建一个小脚本来检测字符串输入是否是:
1) 一个 URL(将包含一个文件名):' http://ajax.googleapis.com/html5shiv.js '
2)只是一个文件名:'html5shiv.js'
到目前为止,我已经找到了这个,但我认为它只是检查 URL 和文件扩展名。有没有一种简单的方法可以使它使用“或”检查?我对 RegExp 不是很有经验。
var myRegExp = /[^\\]*\.(\w+)$/i;
先感谢您。
基本上,要在正则表达式中使用“OR”,只需使用“管道”分隔符。
(aaa|bbb)
将匹配
aaa
或者
bbb
对于匹配 url 的正则表达式,我建议如下:
\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*
这基于url允许的字符集。
对于文件,您对文件名的定义是什么?
如果您想搜索匹配“(至少)一对多非句号字符,后跟一个句号,然后是(至少)一对多非句号字符”的字符串,我建议使用以下正则表达式:
[^\.]+\.[^\.]+
总的来说:
(\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*|[^\.]+\.[^\.]+)
这是一个工作示例(在 javascript 中):jsfiddle
您可以在这里在线测试正则表达式:http: //gskinner.com/RegExr/
如果是出于流量控制的目的,您可以执行以下操作:
var test = "http://ajax.googleapis.com/html5shiv.js";
// to recognize http & https
var regex = /^https?:\/\/.*/i;
var result = regex.exec(test);
if (result == null){
// no URL found code
} else {
// URL found code
}
为了捕获文件名,您可以使用:
var test = "http://ajax.googleapis.com/html5shiv.js";
var regex = /(\w+\.\w+)$/i;
var filename = regex.exec(test);
看看这个(根本不需要正则表达式):
var filename = string.indexOf('/') == -1
? string
: string.split('/').slice(-1)[0];
是的,您可以使用交替运算符|
。不过要小心,因为它的优先级很低。低于测序。您将需要编写类似/(cat)|(dog)/
.
用这么少的用例/测试用例很难理解你到底想要什么,但是
(http://[a-zA-Z0-9\./]+)|([a-zA-Z0-9\.]+)
应该给你一个起点。
尝试这个:
var ajx = 'http://ajax.googleapis.com/html5shiv.js';
function isURL(str){
return /((\/\w+)|(^\w+))\.\w{2,}$/.test(str);
}
console.log(isURL(ajx));
这是程序!
<script>
var url="Home/this/example/file.js";
var condition=0;
var result="";
for(var i=url.length; i>0 && condition<2 ;i--)
{
if(url[i]!="/" && url[i]!="."){result= (condition==1)? (url[i]+result):(result);}
else{condition++;}
}
document.write(result);
</script>
如果它是一个 URL,则将其剥离到最后一部分,并将其视为“只是一个文件名”。
function isFile(fileOrUrl) {
// This will return everything after the last '/'; if there's
// no forward slash in the string, the unmodified string is used
var filename = fileOrUrl.split('/').pop();
return (/.+\..+/).test(filename);
}