2016-09-06 5 views
1

Мне трудно поверить, что этого не задавали, но я не могу найти никаких ссылок нигде. Мне нужно добавить фрагмент хэш-кода URI и обновить значение, если оно уже находится в хеше. В настоящее время я могу добавить хеш, но мое регулярное выражение не появляется, если оно существует, поэтому оно добавляет другое вместо обновления.Обновить uri hash javascript

setQueryString : function() { 
     var value = currentPage; 
     var uri = window.location.hash; 
     var key = "page"; 
     var re = new RegExp("([#&])" + key + "=.*#(&|$)", "i"); 
     var separator = uri.indexOf('#') !== -1 ? "&" : "#"; 
     if (uri.match(re)) { 
      return uri.replace(re, '$1' + key + "=" + value + '$2'); 
     } 
     else { 
      return uri + separator + key + "=" + value; 
     } 
    }, 

Также, если это может быть сделано любым чистящим средством при сохранении других значений/хэшей url, это было бы здорово.

пример ввода в соответствии с просьбой

Начиная Uri значение: www.example.com # страница = 1 (или не #page вообще)

затем щелчком "следующей странице" setQueryString получает так что значения будут равны:

var value = 2; 
var uri = '#page1' 
var key = 'page' 

Таким образом, надежный выход будет «# page2».

+0

Можете ли вы привести пример ввода, который вы тестируете –

+0

Здесь вы задаете несколько вопросов: нужно получить регулярное выражение для захвата определенного шаблона, другое - чтение и обновление текущего значения фрагмента страницы (хэша). Я предлагаю вам начать с выделения проблемы регулярного выражения, определить различные случаи и не-случаи (примеры строк) для тестирования и [читать] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions) на регулярные выражения в JS. –

+0

@TomasLangkaas Я не думаю, что это действительно несколько вопросов, когда одно (регулярное выражение) является явной причиной, по которой другой не работает. Я сказал, что уже могу обновить хеш только, что регулярное выражение, похоже, не улавливается, если оно уже существует, что позволяет мне обновить его. Общий хеш-вопрос здесь только для того, чтобы обеспечить контекст и выявить лучшие/альтернативные маршруты. – DasBeasto

ответ

1

Что касается вашего вопроса регулярного выражения, тестирования, если шаблон #page=(number) или &page=(number) присутствует в сочетание с захватом числа, может быть сделан с помощью регулярных выражений /[#&]page\=(\d*)/ и метода .match(regex). Обратите внимание, что = нуждается в экранировании в регулярных выражениях.

Если шаблон существует в строке, result будет содержать массив с целым числом (в виде строки) в result[1]. Если шаблон не существует, result будет null.

//match #page=(integer) or &page=(integer) 
 

 
var test = "#foo=bar&page=1"; 
 
var regex = /[#&]page\=(\d*)/; 
 
var result = test.match(regex); 
 

 
console.log(result);

Если вы хотите, чтобы динамически установить key= на что-то другое, чем "page", вы могли бы построить регулярное выражение динамически, как показано на следующем (обратите внимание, что обратную косую черту потребности вылетающие в строках, делая кодогенератора немного более запутанным):

//dynamically created regex 
 

 
var test = "#foo=bar&page=1"; 
 
var key = "page" 
 
var regex = new RegExp("[#&]" + key + "\\=(\\d*)"); 
 
var result = test.match(regex); 
 

 
console.log(result);