在 JavaScript 中的两点之间查找和替换

Find and replace between two points in JavaScript

本文关键字:之间 两点 查找 替换 JavaScript      更新时间:2023-09-26

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

?集合=法国%20曲线&房间=明亮%20

和%20通风&场景=最佳&wall_treatment=墙壁处理 1

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

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

您可以构建一个正则表达式,匹配字符串的任何部分,如下所示:

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

解决了这个问题后,让我建议你应该尝试从对象或数组构建你的 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();

您可以像这样替换:

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

您可以在每次 url new 时构建,而不是替换字符串中的某些内容:

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

然后有点乌伦编码,一切都应该没问题。如果你的GET参数是动态的,你也可以在foreach中执行此操作。

尝试:

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

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

我希望这有帮助!

你能试试这个吗,

     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