正規表現を使うのは大げさな気がする。
location.hash を location.search に書き換えて URL.searchParams で取得するほうが簡単だろうか?
[, 変数名, 大括弧, 変数値]に分割しながら解析する
function parseParms (str = '') {
let
reg = /(?:^#)?(\D\w*)(\[\])?=(.*?)(?:\&|\;|$)/g,
pieces = new Map;
while (piece = reg.exec (str)) {
let [, key, isAry, val] = piece;
key = decodeURIComponent (key);
val = decodeURIComponent (val);
if (isAry)
val = [val];
if (pieces.has (key))
pieces.set (key, [].concat (pieces.get (key), val));
else
pieces.set (key, val);
}
return Object.fromEntries (pieces);
}