2013-12-12 70 views
-1

我目前正在開發一個Web應用程序,並且需要根據用戶選擇構建一個URL,用戶每個產品只能選擇一個項目,所以我應該能夠創建一個URL看起來像這樣,在JavaScript中的兩個點之間查找和替換

?收集=法語%20Curves &房間=亮%20於是%20Airy &場景=最好& wall_treatment =牆面處理1

。例如,如果用戶選擇不同的wall_treatment,我需要一些如何搜索字符串我正在生成,並用新的相關數據替換該部分?

我在Google上搜索並試圖使用.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"[^&]+會匹配網址中發生的下一次發生的&

更換這樣的:

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); 

已經解決了,我建議你應該嘗試從一個對象或一個數組,而不是在URL字符串替代變量,建立你的網址:

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和一切都應該罰款。如果您的GET-參數是動態的,您也可以在foreach中執行此操作。

0

嘗試:

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

構建上述正則表達式,其中wall_treatment可以是來自您url的任何參數。 如果它是scene正則表達式將捕獲best如果wall_treatment正則表達式將捕獲Wall Treatment 1

我希望這有助於!