2013-12-12 2 views
-1

Я работаю над веб-приложением на данный момент, и мне нужно создать URL-адрес на основе выбора пользователей, пользователь может выбрать только 1 элемент на продукт, поэтому я должен быть способен чтобы создать URL, который выглядит так,Найти и заменить между двумя точками в JavaScript

? коллекция = французский% 20Curves & номер = Яркое% 20 И% 20Airy & сцена = лучший & wall_treatment = Wall Лечение 1

Если, например, пользователи выбирает другой wall_treatment, мне нужно, чтобы поиск строка, которую я генерирую, и заменить этот раздел новыми соответствующими данными?

Я googled и пытался использовать .replace(), но это не работает, никаких идей?

+2

Так почему же вы не просто наращиваете строку? – epascarello

+0

Извините, что вы имеете в виду, каждый раз что-то меняет, я добавляю его в строку, но что, если я хочу изменить что-то, что уже есть в строке? – Udders

+0

Построение жала по запросу ...'var url = baseURL +" collection = "+ encodeURIComponent (xxx) +" & room = "+ encodeURIComponent (yyy);' – epascarello

ответ

0

Вы можете построить регулярное выражение, соответствующее любую часть строки, как это:

var urlPart = "wall_treatment"; 
var reg = new RegExp("([&?]+)" + urlPart + "=[^&]+"); 

Просто замените "wall_treatment" с любым переменным, держа строку/часть вашего URL. [^&]+ соответствует любому до & в URL-адресе.

Заменить его следующим образом:

var yourURL = "?collection=French%20Curves&room=Bright%20And%20Airy&scene=best&wall_treatment=Wall Treatment 1"; 
var new_value = "Wall Treatment 2"; 
yourURL.replace(reg, "$1" + urlPart + "=" + new_value); 

Решив, что, позвольте мне сообщить, что вы, вероятно, следует попытаться построить свой адрес из объекта или массива, а не замены переменных в адресной строке:

var myURLSearchObject = {}, 
    addURLSearchPart = function(key, value) { 
     myURLSearchObject[key] = value; 
    }, 
    buildURLSearch = function() { 
     var string = "?"; 
     for (var key in myURLSearchObject) { 
     if (myURLSearchObject.hasOwnProperty(key)) { 
      string.length > 1 && (string += '&'); 
      string += key; 
      string += '='; 
      string += myURLSearchObject[key]; 
     } 
     } 
     return string; 
    }; 

Теперь вы можете использовать его как это:

addURLSearchPart('hello', 'hi'); 
addURLSearchPart('bye', 'goodbye'); 

buildURLSearch(); 
0

Вы можете попробовать это,

 var String ='?collection=French%20Curves&room=Bright%20And%20Airy&scene=best&wall_treatment=Wall Treatment 1'; 
    var Urls = String.split('wall_treatment=');   
    String = String.replace(Urls[1], "YourString"); 
    console.log(String); //output : ?collection=French%20Curves&room=Bright%20And%20Airy&scene=best&wall_treatment=YourString 
0

Вы можете заменить так:

wt="something"; // user entered value 

s = '?collection=French%20Curves&room=Bright%20And%20Airy&scene=best&wall_treatment=Wall Treatment 1'; 
s = s.replace(/([?&]wall_treatment=)[^&]*/i, "$1" + wt); 
//=> ?collection=French%20Curves&room=Bright%20And%20Airy&scene=best&wall_treatment=something 
0

Вы могли бы построить каждый раз, когда URL-адрес нового вместо того, чтобы заменить что-то в строке:

var collection = 'French Curves'; 
var room = 'Bright and Airy'; 
var scene = 'best'; 
var wallTreatment = 'Wall Treatment 1'; 

newUrl = '?collection=' + collection + '&room=' + room + '&scene=' + scene + '&wall_treatment=' + wallTreatment'; 

Затем немного urlencode и все должно быть хорошо. Вы можете сделать это и в foreach, если ваши GET -Параметры динамически.

0

Try:

(?i)(?<=wall_treatment=)[^&]+ 

Создайте вышеперечисленное выражение, где wall_treatment может быть любым параметром с вашего URL-адреса. Если было scene, регулярное выражение будет захватывать best, если wall_treatment regex заберет Wall Treatment 1.

Надеюсь, это поможет!

Смежные вопросы