Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2014, 12:31
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Заменить регуляркой число после id= в URL
Добился пока что таких успехов:

var url='http://example.com/model/catalog?pid=807&id=123&on=87';

var id = 999;

url.replace(/&id=(\d+)/, '&id='+id);

/*
httр://example.com/model/catalog?pid=807&id=999&on=87
*/


но, сами понимаете что вместо & может быть ? (или не может быть, если его выкинуть из location.search) если id будет на первом месте, а если без & и без ?, то, если pid= встретится первым - он и будет заменен.

Задача такая что или надо добавлять несусветное количество ссылок в таблицу - это как раз очень просто в php, - или написать скриптик который будет хватать id строки и посылать браузер в новый location, в котором всяких параметров может быть дофига и все их надо сохранить, а id=n заменить.

Помогите кто понимает в регах как составить такую регу. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2014, 13:23
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Вот так вроде работает
var url1='http://example.com/model/catalog?pid=807&id=123&on=87';
var url2='http://example.com/model/catalog?pid=807?id=123&on=87';
var url3='http://example.com/model/catalog?pid=807id=123&on=87';
var id = 999;
console.log(url1.replace(/(\W)(id=)\d+/, '$1$2'+id))
console.log(url2.replace(/(\W)(id=)\d+/, '$1$2'+id))
console.log(url3.replace(/(\W)(id=)\d+/, '$1$2'+id))
    
//  [url]http://example.com/model/catalog?pid=807&id=999&on=87[/url]
//  [url]http://example.com/model/catalog?pid=807?id=999&on=87[/url]
//  [url]http://example.com/model/catalog?pid=807id=123&on=87[/url]

особо не парился, ибо ты не достоин
Зы не не работает в последней строке, только что заметил

Последний раз редактировалось krutoy, 04.12.2014 в 13:29.
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2014, 13:27
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Спасибо, в этой теме вы блеснули и спасли меня от позора. Еще раз спасибо. Плюсовать не могу, ибо прошлый минус еще не сгорел
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2014, 13:31
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

kostyanet,
Рано радоваться, я лоханулся. Последний случай не работает, я сразу ен заметил Щас подумаю, как решить.
Ответить с цитированием
  #5 (permalink)  
Старый 04.12.2014, 13:32
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

В смысле я уже собирался на хэшкод идти жаловаться на javascript.ru
Ответить с цитированием
  #6 (permalink)  
Старый 04.12.2014, 13:34
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Не бывает таких вариантов! Всегда есть амперсанд, или ?, если в самом начале. Так что все работает пучком.

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

Последний раз редактировалось kostyanet, 04.12.2014 в 13:36.
Ответить с цитированием
  #7 (permalink)  
Старый 04.12.2014, 13:44
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от kostyanet
Не бывает таких вариантов! Всегда есть амперсанд, или ?
А-а-а, а то я уже придумал как можно было б. а если так, то надежней, кажись, будет вот так
var url1='http://example.com/model/catalog?pid=807&id=123&on=87';
var url2='http://example.com/model/catalog?pid=807?id=123&on=87';
var id = 999;
re=/(&|\?)(id=)\d+/
console.log(url1.replace(re, '$1$2'+id))
console.log(url2.replace(re, '$1$2'+id))

//  [url]http://example.com/model/catalog?pid=807&id=999&on=87[/url]
//  [url]http://example.com/model/catalog?pid=807?id=999&on=87[/url]
Ответить с цитированием
  #8 (permalink)  
Старый 04.12.2014, 14:02
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

А, так вот оно как, надо было экранировать только спец-вопрос. Я так делал, ну, по аналогии, есть у меня похожие варианты в кодах, но забил и амперсанд обратным слешем и ничего не менялось. Ну то есть я делал похоже. Это одуреть можно всматриваться в эти черточки и буквочки, ну ладно, запишу и это на всякий случай.

Функция получилась все равно уродской.

table.addEventListener("click",function(e){
	var row=e.target.parentNode;
	if(!row.parentNode.nodeName.match(/tbody/i)) { // эта рега была давно
		e.preventDefault();
		return false;
	}
	var id=row.id.replace(/\D/g,\'\'); // эту регу я тоже надыбал
	if(location.search.length<2)
		location.assign(location.href+\'?id=\'+id);
	else if(location.search.match(/(\W)(id=)\d+/))
		location.assign(location.href.replace(/(\W)(id=)\d+/,\'$1$2\'+id))
	else
		location.assign(location.href+\'&id=\'+id)
});


Потому что получается что search может не быть - бНОПНЯ (то есть ?), search может быть и там может не быть id, search может быть и там может быть id. Блеать! На php я написал класс Get с ладонь размером, который генерит что хочешь get->id(31)->pid(999)->on('dd')->article(null)->page(2) // и все это можно прямо в строку воткнуть, __toString() выведет нормальный урл. Вызов типа article(null) это значит надо убить такой аргумент в урле.

Ну вот, неужели думаю придется разбирать эту хрень на js, ну понятно что в принципе там ничего сложного, но опять эти циклы, сбор-разбор и все ради одного id.
Ответить с цитированием
  #9 (permalink)  
Старый 04.12.2014, 14:09
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Потому что на php есть parse_str и http_build_query. Поэтому с ладонь, ну еще есть array_filter(), хоть http_build_query() и сама не выводит аргументы у которых значение null.

Насчет амперсанда. Его может не быть в том смысле, что будет другой сепаратор. В php.ini где-то оно задается. Но все нормальные люди пользуются амперсандом и я туда же.

Последний раз редактировалось kostyanet, 04.12.2014 в 14:12.
Ответить с цитированием
  #10 (permalink)  
Старый 04.12.2014, 15:53
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

.replace(/(^|[&?])id=\d+/, '$1id=' + id)

kostyanet, замена твоей функции:
var search = location.search.replace(/[&?]id=\d*/, '')
location.search = search ? search + '&id=' + id : 'id=' + id;
__________________
29375, 35

Последний раз редактировалось Aetae, 04.12.2014 в 16:10.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить пробелы в число после рандома RuSS_lan Общие вопросы Javascript 3 05.01.2013 18:05
Необходимо заменить id=" и id= на id="s и id=s mirek Общие вопросы Javascript 6 03.06.2012 04:14
Как найти наибольшее число и ввести его на экран? Ivan152 Оффтопик 2 20.05.2012 20:13
Вырезать регуляркой число KamalovRadik jQuery 2 10.02.2012 18:27
Не получается округлить число (после деления - длинные числа) Randomizer jQuery 5 20.10.2011 22:44