在JavaScript中查找并替换两点之间

时间:2013-12-12 17:01:50

标签: javascript regex string replace

我目前正在开发一个网络应用程序,我需要根据用户选择构建一个URL,用户每个产品只能选择一个项目,所以我应该能够创建一个这样的网址,

  

?collection = French%20Curves& room = Bright%20And%20Airy& scene = best& wall_treatment = Wall Treatment 1

例如,如果用户选择了不同的wall_treatment,我需要了解一些如何搜索我正在生成的字符串,并用新的相关数据替换该部分?

我用谷歌搜索并试图使用.replace()但这不起作用,有什么想法吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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中执行此操作。

答案 3 :(得分: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,而不是替换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();

答案 4 :(得分:0)

尝试:

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

构建上面的正则表达式,其中wall_treatment可以是您网址中的任何参数。 如果是scene正则表达式将捕获best如果wall_treatment正则表达式将捕获Wall Treatment 1

我希望这有帮助!