我想在调用函数后将正则表达式匹配的str替换为其他字符串。 无法找到相同的方法..
考虑
var str = "someRegex ajfgdgkjdljlgdgjlrm someRegeeeeex dfdsfj";
var re = /someReg(.*?)x/g;
while ((m = re.exec(str)) != null) {
// m= ["someRegex", "e"]
// m= ["someRegeeeeex", "eeeee"]
// I WANT TO REPLACE THE MATCHED WITH AFTER CALLING A FUNCTION
// lets say someRegex with someRegex1 and someRegeeeeex with someRegeeeeex5
}
注意:我不想使用str替换,因为它不会给我正确的解决方案。让我们说someRegex用someRegex1和someRegeeeeex替换someRegeeeeex5。使用str.replace会一次又一次地替换第一个。
答案 0 :(得分:0)
您似乎正在尝试将该组值的长度附加到匹配项中。如果是这种情况,replace
可以与函数一起使用:
var str = "someRegex ajfgdgkjdljlgdgjlrm someRegeeeeex dfdsfj";
var re = /someReg(.*?)x/g;
var result = str.replace(re, function(match, group) {
return match + group.length;
});
console.log(result);
有关String.prototype.replace
方法,请参阅Specifying a function as a parameter。
答案 1 :(得分:0)
使用str.replace会一次又一次地替换第一个。
仅当您传递/ g修饰符时才会这样。不确定您的实际数据是什么,因此可能相关或不相关。
再次不知道你的实际数据,我想我在这里使用match()而不是exec()并从匹配中重建字符串。 E.g。
var str = "someRegex ajfgdgkjdljlgdgjlrm someRegeeeeex dfdsfj";
var re = /someReg(.*?)x/g;
str.match(re);
产生
["someRegex", "someRegeeeeex"]
答案 2 :(得分:0)
首先,使用 while 循环播放您的字符串。
然后在循环内使用 replace 来更新已创建的字符串。
var str = 'one two [%test1%] try some test [%test2%]';
var regex = /\[%(.*?)\%]/g;
function populateStudioMacro() {
var result;
while((result = regex.exec(str)) !== null) {
// match found
document.body.innerHTML += 'Found<br>';
document.body.innerHTML += result[0] + '<br>';
document.body.innerHTML += result[1] + '<br>';
// replace string matched
str = str.replace(result[0], ' =>new string<= ');
}
document.body.innerHTML += str;
}
populateStudioMacro();