Javascript 用于检测包含URL或文件扩展名的字符串的正则表达式

Javascript 用于检测包含URL或文件扩展名的字符串的正则表达式,javascript,regex,Javascript,Regex,我正在尝试创建一个小脚本,用于检测字符串输入是否为: 1) URL(将包含文件名):“” 2) 只是一个文件名:“html5shiv.js” 到目前为止,我已经找到了这个,但我认为它只是检查了URL和文件扩展名。有没有一种简单的方法使它使用“或”检查?我对RegExp不是很有经验 var myRegExp = /[^\\]*\.(\w+)$/i; 提前感谢您。请看一下这个(根本不需要正则表达式): 是的,您可以使用交替运算符|。但要小心,因为它的优先级很低。低于测序。您需要编写类似于/(cat

我正在尝试创建一个小脚本,用于检测字符串输入是否为:

1) URL(将包含文件名):“”

2) 只是一个文件名:“html5shiv.js”

到目前为止,我已经找到了这个,但我认为它只是检查了URL和文件扩展名。有没有一种简单的方法使它使用“或”检查?我对RegExp不是很有经验

var myRegExp = /[^\\]*\.(\w+)$/i;
提前感谢您。

请看一下这个(根本不需要正则表达式):


是的,您可以使用交替运算符
|
。但要小心,因为它的优先级很低。低于测序。您需要编写类似于
/(cat)|(dog)/
的内容

使用这么少的用例/测试用例很难理解您到底想要什么,但是

(http://[a-zA-Z0-9\./]+)|([a-zA-Z0-9\.]+)

应该给你一个起点。

如果它是一个URL,请将其剥离到最后一部分,并将其视为“只是一个文件名”

这个正则表达式怎么样

(\.js)$
它检查行的末尾是否有.js

$
表示行尾


基本上,要在正则表达式中使用'OR',只需使用'pipe'分隔符即可

(aaa|bbb)
将匹配

aaa

要使正则表达式与url匹配,我建议如下:

\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*
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
}
这是基于url的

对于文件,您对文件名的定义是什么

如果要搜索字符串,则匹配“(至少)一对多个非句号字符,后跟一个句号,后跟(至少)一对多个非句号字符”,我建议使用以下正则表达式:

[^\.]+\.[^\.]+
总之:

(\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*|[^\.]+\.[^\.]+)
下面是一个工作示例(使用javascript):

您可以在此处在线测试正则表达式:

尝试以下方法:

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>

var url=“Home/this/example/file.js”;
var条件=0;
var结果=”;

对于(var i=url.length;i>0&&condition,如果是为了流量控制,可以执行以下操作:

\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*
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);    

非常酷。我正在重用一个不同的正则表达式,因为我在调用这个函数之前对它使用了.test(),以返回关于它是否有文件的布尔值。好的,我不知道你需要使用正则表达式。但是为什么要下推呢?
Array
没有方法
last()
在任何当前的ES规范中。我认为。
\.
而不是
但是。为什么URL正则表达式中没有
%
?好问题!答案是我很懒,只是直接从这个答案中删除了有效字符(应该已经正确完成我的家庭作业)-!我已经更新了答案以包含“%”。
var test = "http://ajax.googleapis.com/html5shiv.js";    

var regex = /(\w+\.\w+)$/i;    
var filename = regex.exec(test);