Javascript 如何仅替换图案的一部分?

Javascript 如何仅替换图案的一部分?,javascript,regex,replace,Javascript,Regex,Replace,我有以下字符串: 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";

document.write(hashString);
模式为paramName1,valueName1;paramName2,valueName2;paramName3、valueName3,依此类推,添加我需要多少对名称/值

我需要更改paramNameX的valueNameX。用正则表达式进行试验;我不能很好地与他们相处。结束分隔符应该是;还是“空”?开始

试用:


但是没有任何成功。

您可以不使用
regex执行此操作

步骤:

  • 中的字符串您将获得一个数组
  • 检查数组的每个字符串,并检查它是否包含
参数名
。如果返回
paramName+paramValue
否则返回相同的字符串
  • 在保留
    的同时返回字符串数组作为分隔符,您将获得预期的输出
  • var hashString=“模型,5;月,10;年,2018”;
    var paramValueReplacer=(paramName,paramValue,str)=>str.split(“;”)
    .map(s=>s.includes(paramName)?paramValue?(paramName+paramValue):“”:s)
    .过滤器(s=>!!s)
    .join(“;”)
    var paramName1=“月”;
    var paramValue1=8;
    log(paramValueReplacer(paramName1,paramValue1,hashString))
    var paramName2=“月”;
    var paramValue2=“”;
    
    log(paramValueReplacer(paramName2,paramValue2,hashString))
    要准确回答您的问题,要将参数传递到正则表达式中,您应该使用
    new RegExp()
    ,然后将创建的实例传递到
    replace()
    。换句话说,接受字符串作为参数(或其他regexp),接受regexp实例作为参数

    var hashString=“模型,5;月,10;年,2018”;
    var param=“月”;
    var regex=new RegExp(“(“+param+”)[0-9]*”,“g”);
    参数值=8;
    hashString=hashString.replace(regex,“$1”+paramValue);
    
    log(hashString)不能在正则表达式对象文本中直接使用变量
    /

    试一试

    paramValue = 8;
    hashString = hashString.replace(new RegExp("("+paramName+")[^;]+",'g'), "$1"+paramValue);
    
    • [^;]
      除了
      以外的任何东西
    • $1
      paramName用
      ()

    错了。结果必须是“车型,5;月份,8;年份,2018”@markzzz我知道,我试图显示传递要替换的参数的关键,而不是正则表达式本身。但我已经用一个合适的正则表达式更新了代码。它可以是数字,也可以是任何形式,而不仅仅是0-9。但我明白你的意思:)这也是一个伟大的方法!如果我传递一个空的
    paramValue
    ,并且需要删除相应的
    paramName
    ,该怎么办?因此,如果我通过
    paramValue=“
    它会从模式中删除
    month,10
    ?我还为删除
    添加了这个在中间或开始/结束:<代码>。替换(/^,+^;+$/g,'')。code>你怎么看?@markzzz如果你尝试以上给定的方法,你不需要
    替换(“;;”,“;”)
    你的预期输出是什么?
    paramValue = 8;
    hashString = hashString.replace(new RegExp("("+paramName+")[^;]+",'g'), "$1"+paramValue);