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