我正在尝试创建一个小脚本来检测字符串输入是否为:
1)一个URL(将包含文件名):'http://ajax.googleapis.com/html5shiv.js'
2)只是一个文件名:'html5shiv.js'
到目前为止,我已经找到了这个,但我认为它只是检查URL和文件扩展名。是否有一种简单的方法可以使用'或'检查?我对RegExp不太熟悉。
var myRegExp = /[^\\]*\.(\w+)$/i;
提前谢谢。
答案 0 :(得分:2)
答案 1 :(得分:1)
基本上,要在正则表达式中使用“OR”,只需使用“管道”分隔符。
(aaa|bbb)
将匹配
aaa
或
bbb
要使正则表达式匹配网址,我建议如下:
\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*
这是基于网址的allowed character set。
对于文件,您对文件名的定义是什么?
如果你想搜索字符串,匹配“(至少)一个到多个非fullstop字符,然后是一个fullstop,然后是(至少)一个到多个非fullstop字符”,我建议以下正则表达式:
[^\.]+\.[^\.]+
总而言之:
(\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*|[^\.]+\.[^\.]+)
这是一个工作的例子(在javascript中):jsfiddle
您可以在线测试正则表达式:http://gskinner.com/RegExr/
答案 2 :(得分:0)
看看这个(根本不需要正则表达式):
var filename = string.indexOf('/') == -1
? string
: string.split('/').slice(-1)[0];
答案 3 :(得分:0)
是的,您可以使用交替运算符|
。但要小心,因为它的优先级非常低。低于测序。您需要编写/(cat)|(dog)/
等内容。
如此少的使用/测试用例很难理解你究竟想要什么,但是
(http://[a-zA-Z0-9\./]+)|([a-zA-Z0-9\.]+)
应该给你一个起点。
答案 4 :(得分:0)
如果是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);
}
答案 5 :(得分:0)
试试这个:
var ajx = 'http://ajax.googleapis.com/html5shiv.js';
function isURL(str){
return /((\/\w+)|(^\w+))\.\w{2,}$/.test(str);
}
console.log(isURL(ajx));
答案 6 :(得分:0)
这是程序!
<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>
答案 7 :(得分:0)
如果是出于流量控制的目的,您可以执行以下操作:
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);