admin管理员组

文章数量:1335617

I'm trying to create a small script that detects whether the string input is either:

1) a URL (which will hold a filename): '.js'

2) just a filename: 'html5shiv.js'

So far I've found this but I think it just checks the URL and file extension. Is there an easy way to make it so it uses an 'or' check? I'm not very experienced with RegExp.

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

Thank you in advance.

I'm trying to create a small script that detects whether the string input is either:

1) a URL (which will hold a filename): 'http://ajax.googleapis./html5shiv.js'

2) just a filename: 'html5shiv.js'

So far I've found this but I think it just checks the URL and file extension. Is there an easy way to make it so it uses an 'or' check? I'm not very experienced with RegExp.

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

Thank you in advance.

Share Improve this question edited Aug 29, 2013 at 22:02 Andy G 19.4k5 gold badges49 silver badges69 bronze badges asked Aug 29, 2013 at 21:58 Stephen JenkinsStephen Jenkins 1,8363 gold badges26 silver badges40 bronze badges
Add a ment  | 

8 Answers 8

Reset to default 2

How bout this regex?

(\.js)$

it checks the end of the line if it has a .js on it.

$ denotes end of line.

tested here.

Basically, to use 'OR' in regex, simply use the 'pipe' delimiter.

(aaa|bbb)

will match

aaa

or

bbb

For regex to match a url, I'd suggest the following:

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

This is based on the allowed character set for a url.

For the file, what's your definition of a filename?

If you want to search for strings, that match "(at least) one to many non-fullstop characters, followed by a fullstop, followed by (at least) one to many non-fullstop characters", I'd suggest the following regex:

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

And altogether:

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

Here's an example of working (in javascript): jsfiddle

You can test it out regex online here: http://gskinner./RegExr/

If it is for the purpose of flow control you can do the following:

var test = "http://ajax.googleapis./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
}

For the purpose of capturing the file name you could use:

var test = "http://ajax.googleapis./html5shiv.js";    

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

Yes, you can use the alternation operator |. Be careful, though, because its priority is very low. Lower than sequencing. You will need to write things like /(cat)|(dog)/.

It's very hard to understand what you exactly want with so few use/test cases, but

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

should give you a starting point.

If it's a URL, strip it down to the last part and treat it the same way as "just a filename".

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);
}

Try this:

var ajx = 'http://ajax.googleapis./html5shiv.js';
function isURL(str){
  return /((\/\w+)|(^\w+))\.\w{2,}$/.test(str);
}
console.log(isURL(ajx));

Have a look at this (requires no regex at all):

var filename = string.indexOf('/') == -1
             ? string
             : string.split('/').slice(-1)[0];

Here is the program!

<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>

本文标签: javascriptRegex to detect a string that contains a URL or file extensionStack Overflow