Вы просите javascript разбить строку на массив, основываясь на правилах вашего регулярного выражения, поэтому строка «? Param = 123456» превращается в массив, где все, вплоть до =, является просто разделителем, поэтому видит два ключа: пустую строку и 123456.
РЕДАКТИРОВАТЬ - Вы все еще можете использовать разделение, просто используйте другой разделитель. IndexOf говорит, чтобы он смотрел на подстроку после позиции «?», Поэтому, если вы разделите на «=», он предоставит массив, в котором одно значение является именем параметра (возможно, с «?» Или «&» , поэтому просто удалите его), а следующее значение - это значение, отправленное после знака равенства.
Вы также можете получить немного больше глубины с помощью своего регулярного выражения и обработки следующим образом:
var q = window.location.search; // returns everything after '?'
var regEx = /[^?& =]([\w]*)[^!?& =]/g;
var array = q.match(regEx);
var vars = new Array();
for (var i = 0; i < array.length; i++) {
if ((i % 2) == 0) {
vars[array[i]] = array[i + 1];
}
}
Что оставит вас с массивом, где ключи - это имена параметров, а их значения - связанные значения из строки запроса.