3

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

1) 一个 URL(将包含一个文件名):' http://ajax.googleapis.com/html5shiv.js '

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

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

var myRegExp = /[^\\]*\.(\w+)$/i;

先感谢您。

4

8 回答 8

2

这个正则表达式怎么样?

(\.js)$

如果上面有 .js,它会检查行尾。

$表示行尾。

在这里测试。

于 2013-08-29T22:18:59.760 回答
1

基本上,要在正则表达式中使用“OR”,只需使用“管道”分隔符。

(aaa|bbb)

将匹配

aaa

或者

bbb

对于匹配 url 的正则表达式,我建议如下:

\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*

这基于url允许的字符集

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

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

[^\.]+\.[^\.]+

总的来说:

(\w+://[\w\._~:/?#\[\]@!$&'()*+,;=%]*|[^\.]+\.[^\.]+)

这是一个工作示例(在 javascript 中):jsfiddle

您可以在这里在线测试正则表达式:http: //gskinner.com/RegExr/

于 2013-08-29T22:24:09.770 回答
1

如果是出于流量控制的目的,您可以执行以下操作:

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);    
于 2013-08-29T23:30:31.097 回答
0

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

var filename = string.indexOf('/') == -1
             ? string
             : string.split('/').slice(-1)[0];
于 2013-08-29T22:04:03.543 回答
0

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

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

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

应该给你一个起点。

于 2013-08-29T22:05:50.723 回答
0

尝试这个:

var ajx = 'http://ajax.googleapis.com/html5shiv.js';
function isURL(str){
  return /((\/\w+)|(^\w+))\.\w{2,}$/.test(str);
}
console.log(isURL(ajx));
于 2013-08-29T22:34:56.467 回答
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>
于 2013-08-29T22:39:39.070 回答
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);
}
于 2013-08-29T22:09:58.690 回答