首页 > 解决方案 > 如何仅替换模式的一部分?

问题描述

我有以下字符串:

var hashString = "model,5;month,10;year,2018";

document.write(hashString);

模式是paramName1,valueName1;paramName2,valueName2;paramName3,valueName3,依此类推,添加我需要的名称/值对。

我需要更改 paramNameX 的 valueNameX。尝试使用正则表达式;我不太能应付他们。结束分隔符是 ; 还是“空”?开始?

试过这个

var hashString = "model,5;month,10;year,2018";

paramName = "month,";
paramValue = 8;
hashString = hashString.replace(/paramName.*;/g, paramValue);

document.write(hashString);

但没有任何成功。

标签: javascriptregexreplace

解决方案


您可以不使用regex.

脚步:

  • split你的字符串;会得到一个数组。
  • map通过数组的每个字符串并检查它是否includes paramName。如果它确实返回,则paramName + paramValue返回相同的字符串。
  • join在保留为分隔符的同时返回字符串数组;,您将获得预期的输出。

var hashString = "model,5;month,10;year,2018";

var paramValueReplacer = (paramName, paramValue, str) => str.split(";")
                       .map(s => s.includes(paramName) ? paramValue ? (paramName + paramValue) : "" : s)
                       .filter(s => !!s)
                       .join(";")

var paramName1 = "month,";
var paramValue1 = 8;

console.log(paramValueReplacer(paramName1, paramValue1, hashString))

var paramName2 = "month,";
var paramValue2 = "";

console.log(paramValueReplacer(paramName2, paramValue2, hashString))


推荐阅读