URI構文は次のとおりです。
scheme ":" hier-part [ "?" query ] [ "#" fragment ]
(詳細については、 RFC 3986を参照してください)
したがって、この例#blue?something=x
にはフラグメントがあり、クエリ文字列はありません。ここで、適切に形成された場合:
www.example.com?something=x#blue
あなたは?something
クエリとして、そして#blue
フラグメントとして持っています。テストする:
var a = document.createElement("a");
a.href = "http://www.example.com#blue?something=x"
console.log(a.hash, a.search);
a.href = "http://www.example.com?something=x#blue"
console.log(a.hash, a.search);
したがって、最初に、投稿したURIが意図したものであるかどうかを確認する必要があります。これは、それらが整形式ではないように見えるためです。
例が正しければ、次のようなものを使用できます。
function getFragment(s) {
var v = s.match(/#([^?&]+)/);
return v ? v[1] : "";
}
または:
function getFragment(s) {
return [].concat(s.match(/#([^?&]+)/))[1] || "";
}
しかし、私の意見では読みにくいです。
[^?&]
PSアルファベットだけに本当に興味がある場合は、に置き換えることができます[A-Za-z]
。ただし、この方法では、 www.example.com#blue12&something=x
どちらのようにもURLを一致させることはできませんwww.example.com#blue_and_green&something=x
。その意図があれば、交換することができます。それ以外の場合、keepはまたはで[^?&]
はないすべての文字と一致するため、より一般的になります。?
&