ハッシュからそれを抽出し、URL の他の場所を回避するコードは次のとおりです。
function getLocaleFromHash(url) {
var match = url.match(/#.*[?&]locale=([^&]+)(&|$)/);
return(match ? match[1] : "");
}
そして、ここですべてのテストケースで動作することがわかります: http://jsfiddle.net/jfriend00/p37Mx/
ハッシュ内の任意のパラメーターを検索できるようにしたい場合は、これを使用します。
function getParmFromHash(url, parm) {
var re = new RegExp("#.*[?&]" + parm + "=([^&]+)(&|$)");
var match = url.match(re);
return(match ? match[1] : "");
}
ここで動作することを確認してください:http://jsfiddle.net/jfriend00/6kgUk/
URL 内のすべてのパラメーターを取得する、より一般的な関数は次のようになります。ハッシュがクエリの後にあり、パラメーターがクエリ文字列にある通常の URL の場合、次のようになります。より多くのことを行うため、これはもう少しコードです。すべてのパラメーターをオブジェクトにフェッチし、そのキーで任意のパラメーターを検索でき、URL もすべてデコードします。
function getParmsFromURL(url) {
var parms = {}, pieces, parts, i;
var hash = url.lastIndexOf("#");
if (hash !== -1) {
// remove hash value
url = url.slice(0, hash);
}
var question = url.lastIndexOf("?");
if (question !== -1) {
url = url.slice(question + 1);
pieces = url.split("&");
for (i = 0; i < pieces.length; i++) {
parts = pieces[i].split("=");
if (parts.length < 2) {
parts.push("");
}
parms[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
}
}
return parms;
}
ハッシュ値と ? の後のパラメータを処理する特別なバージョンの場合 OPの質問(典型的なケースではありません)のようなハッシュ値では、これを使用できます:
function getParmsFromURLHash(url) {
var parms = {}, pieces, parts, i;
var hash = url.lastIndexOf("#");
if (hash !== -1) {
// isolate just the hash value
url = url.slice(hash + 1);
}
var question = url.indexOf("?");
if (question !== -1) {
url = url.slice(question + 1);
pieces = url.split("&");
for (i = 0; i < pieces.length; i++) {
parts = pieces[i].split("=");
if (parts.length < 2) {
parts.push("");
}
parms[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
}
}
return parms;
}
実際のデモ: http://jsfiddle.net/jfriend00/v8cd5/
そして、ローカル オプションが必要な場合は、次のようにします。
var parms = getParmsFromURL(url);
var locale = parms["locale"];