我有以下字符串:
var hashString = "model,5;month,10;year,2018";
document.write(hashString);
模式为 paramName1,valueName1; paramName2,valueName2; paramName3,valueName3 ,依此类推,添加所需的名称/值对。
我需要更改paramNameX的valueNameX。与正则表达式一起尝试;我对他们不太满意。结束定界符为;还是“空”?开始?
尝试过this:
var hashString = "model,5;month,10;year,2018";
paramName = "month,";
paramValue = 8;
hashString = hashString.replace(/paramName.*;/g, paramValue);
document.write(hashString);
但没有成功。
答案 0 :(得分:2)
您可以不使用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))
答案 1 :(得分:0)
要确切回答您的问题,要将参数传递到正则表达式中,应使用onRemoveRow(selected)
,然后将创建的实例传递给new RegExp()
。换句话说,RegExp()接受字符串作为参数(或其他正则表达式),replace()接受RegExp实例作为参数。
replace()
无论哪种方式,我认为最好的方法是创建一个这样的对象:
var hashString = "model,5;month,10;year,2018";
var param = "month,";
var regex = new RegExp("(" + param + ")[0-9]*", "g");
paramValue = 8;
hashString = hashString.replace(regex, "$1" + paramValue);
console.log(hashString);
如果要泛泛使用:
var hashString = "model,5;month,10;year,2018";
var obj = {};
hashString.split(";").map(o => {
var el = o.split(",");
obj[el[0]] = el[1];
})
obj.month = 8
console.log(obj)
答案 2 :(得分:0)
您不能在正则表达式对象文字//
中直接使用变量:
尝试
paramValue = 8;
hashString = hashString.replace(new RegExp("("+paramName+")[^;]+",'g'), "$1"+paramValue);
[^;]
除了;
$1
paramName是用()
捕获的