2010-06-25 133 views
1

我试图将其中通配符的网址与实际网址进行匹配。例如:与通配符匹配的网址

http://*google.com/* 

需要匹配

http://maps.google.com 

而且

http://www.google.com/maps 

会是什么要对这个最好的方法?

我试过使用正则表达式,并且在我手动编程时正常工作,但我不确定是否可以动态生成正则表达式,或者如果这将是这种情况下的最佳做法。

/(http|https):\/\/.*\.?google\.com\/?.*/i 

非常感谢。

+0

WATCHOUT的问题,指出了@Sjoerd – Amarghosh 2010-06-25 11:24:51

+0

什么是您的解决方案,这一点,@ SAM-投球手? – 2015-09-13 14:57:37

回答

1

[^ ]*替换所有出现的* - 它匹配零个或多个非空格字符序列。

因此http://*google.com/*将成为http://[^ ]*google.com/[^ ]*

这里是一个正则表达式做任务:

regex = urlPattern.replace(/\*/g, "[^ ]*"); 
+3

这可能会受到 http://www.mydomain.com/google.com/bla的影响 – Asaf 2012-08-18 21:46:23

3

生成一个正则表达式可能是正确的做法,但得到比简单地替换星号更复杂。

例如,您的图案http://*google.com/*不应匹配http://www.malicioushacker.org/1337/google.com/maps

2

如果你想看到一个经过良好测试的库来提取部分URI,我会检查一下Google Closure Library的goog.uri.utils方法。

https://github.com/google/closure-library/blob/8e44fb343fff467938f9476ba7f727c6acac76d8/closure/goog/uri/utils.js#L187

下面是做繁重的正则表达式:

goog.uri.utils.splitRe_ = new RegExp(
    '^' + 
    '(?:' + 
     '([^:/?#.]+)' +      // scheme - ignore special characters 
              // used by other URL parts such as :, 
              // ?, /, #, and . 
    ':)?' + 
    '(?://' + 
     '(?:([^/?#]*)@)?' +     // userInfo 
     '([\\w\\d\\-\\u0100-\\uffff.%]*)' + // domain - restrict to letters, 
              // digits, dashes, dots, percent 
              // escapes, and unicode characters. 
     '(?::([0-9]+))?' +     // port 
    ')?' + 
    '([^?#]+)?' +       // path 
    '(?:\\?([^#]*))?' +     // query 
    '(?:#(.*))?' +      // fragment 
    '$');