javascript正则表达式exec和替换

时间:2014-05-23 15:51:54

标签: javascript regex

我想在调用函数后将正则表达式匹配的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会一次又一次地替换第一个。

3 个答案:

答案 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();