使用JavaScript我想检查给定的URL是否与URL方案列表匹配。我走到这一步:
function on_wikipedia() {
// the list of allowed locations
var allowed_locations = new Array( "http://*.wikibooks.org/*"
, "http://*.wikimedia.org/*"
, "http://*.wikipedia.org/*"
, "http://*.wikiquote.org/*"
, "http://*.wikiversity.org/*"
, "http://*.wiktionary.org/*"
, "http://www.mediawiki.org/*"
, "https://secure.wikimedia.org/*"
);
// current location; e.g. "http://en.wikipedia.org/wiki/Main_Page"
var current_location = content.document.location;
var valid = false;
// compare current_location to allowed_locations and set valid to true,
// if it matches
//
// FIXME
return valid;
}
这样做也许是一个坏主意。也许我应该使用正则表达式来制作比较器?不幸的是我迷路了...我根本没有JavaScript经验。有人可以指出我正确的方向吗?
答案 0 :(得分:1)
function onWikipedia(){
// Untested
var allowedLocations = /^(?:http:\/\/(?:.+?\.wik(?:ibooks|imedia|ipedia|iquote|iversity|tionary)\.org|www\.mediawiki\.org)\/|https:\/\/secure.wikimedia.org\/)/i;
return allowedLocations.test( content.document.location );
}
正则表达式末尾的i
使其不区分大小写。如果您不想要,请删除。
一般来说,正则表达式说:
^
)的前面开始,查找以下任一项((?:...|...)
):
http://
后跟以下任一项,然后是文字斜杠(\/
)
.+?
)后跟一个文字句点(\.
),然后是wik
,然后是......哦,其中一个域名,后跟{{1} },或.org
www.mediawiki.org
请注意,非常宽松的https://secure.wikimedia.org/
允许匹配.+?
之类的内容。您可能想要更严格的限制,例如字母,数字,下划线,句点或连字符。如果是,请将http://foo.bar.com/?.wikibooks.org/
替换为.+?
或者,您可能只想检查主机名:
,而不是针对整个URL进行测试[\w.-]+?