我正在尝试将带有通配符的网址与实际网址进行匹配。例如:
http://*google.com/*
需要匹配
http://maps.google.com
和
http://www.google.com/maps
最好的解决方法是什么?
我尝试使用正则表达式,并且在我手动编程时工作正常,但我不确定是否可以动态生成正则表达式,或者这是否是这种情况下的最佳实践。
/(http|https):\/\/.*\.?google\.com\/?.*/i
非常感谢。
答案 0 :(得分:2)
生成正则表达式可能是正确的方法,但比简单地替换星号更复杂。
例如,您的模式http://*google.com/*
不应与http://www.malicioushacker.org/1337/google.com/maps
匹配。
答案 1 :(得分:2)
如果你想看到一个经过良好测试的库来提取URI的一部分,我会查看Google Closure Library的goog.uri.utils方法。
这是执行繁重任务的正则表达式:
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, "[^ ]*");