使用通配符匹配URL

时间:2010-06-25 10:22:38

标签: javascript regex url wildcard

我正在尝试将带有通配符的网址与实际网址进行匹配。例如:

http://*google.com/*

需要匹配

http://maps.google.com

http://www.google.com/maps

最好的解决方法是什么?

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

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

非常感谢。

3 个答案:

答案 0 :(得分:2)

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

例如,您的模式http://*google.com/*不应与http://www.malicioushacker.org/1337/google.com/maps匹配。

答案 1 :(得分: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
    '$');

答案 2 :(得分:1)

将模式中*的所有匹配项替换为[^ ]* - 它匹配零个或多个非空格字符的序列。

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

这是执行任务的正则表达式:

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