2011-11-29 171 views
0

我有这个网址...JavaScript网址正则表达式来检查正则表达式与URL

http://www.google.com/local/add/analytics?hl=en-US&gl=US 

我要检查这些URL,看他们是否上面URL匹配...

www.google.com/local/add* 
www.google.com/local/add/* 
http://www.google.com/local/add* 
http://www.google.com/local/add/* 
https://www.google.com/local/add* 
https://www.google.com/local/add/* 

你可以看到输入的URL也是一个正则表达式*,所以我可以用一个正则表达式来匹配URL列表,看看这个URL是否存在?目前我正在这样做...

var isAllowed = (url.indexOf(newURL) === 0); 

这绝对没有效率。

+1

你的问题并不完全清楚。 asterix(*)的用途是什么?它是否意味着非正则表达式的通配符? – Variant

+0

@Variant我会认为*是通配符是的,并且OP想验证这些'案件'的网址。 – rlemon

回答

1

这不是我写过最干净的正则表达式,但我认为它应该工作。

var url = "http://www.google.com/local/add/analytics?hl=en-US&gl=US"; 
var reg = /((https|http|)(\:\/\/|)www\.google.com\/local\/add(\/|)).*/; 
console.log(reg.test(url)); 

这将对于所有这些情况

www.google.com/local/add*
www.google.com/local/add/*返回true
http://www.google.com/local/add *
http://www.google.com/local/add/ *
https://www.google.com/local/add *
https://www.google.com/local/add/ *

应该寻找(httphttps或没有),那么(://或没有),那么www.google.com/local/add然后(/或没有),那么任何事情。

的一个情况下,它也将返回true,我将离开你是(http|https)www.google.com/local/add(/|)*

+0

如果你打算使用它,我确实恳求你测试这个废话。可能在正则表达式上多读一点,并改进它(我不是正则表达式掌握自己...其实我大麦刮:P) – rlemon

0

据我理解你,你想是这样的:

将输入URL的正则表达式。例如:

var input = "http://www.google.com/local/add*"; 
var reg_url = input .replace(/\*/g,".*").replace(/\./g,"\\."); 

您可能需要逃避一些字符,请参阅here

并检查是否匹配:

var url = "http://www.google.com/local/add/analytics?hl=en-US&gl=US"; 
var isAllowed = url.search(reg_url) >= 0; 
1
var reg = new RegExp("(https?://)?(www.)?google.com/local/add/?"), 
    URL = "http://www.google.com/local/add/analytics?hl=en-US&gl=US"; 

console.log(reg.test(URL)); 

我用?了很多,这意味着的情况下,任何字符前面的问号可能会或可能不匹配。

https?s可以或不可以在那里。 (www.)?意味着www.可能完全不存在。你希望得到它现在的工作方式。

Demo

Learn how to use Regular Expressions

+0

ahhh。看到我不知道'?'。好秀,好秀。 – rlemon