【问题标题】:javascript regex exec and replacejavascript正则表达式执行和替换
【发布时间】:2014-07-13 01:42:33
【问题描述】:

我想在调用函数后用其他字符串替换正则表达式匹配的 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 replace 因为它不会给我正确的解决方案。可以说用 someRegex1 替换 someRegex 和用 someRegeeeeex5 替换 someRegeeeeex 。使用 str.replace 将一次又一次地替换第一个。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您似乎正在尝试将组值的长度附加到匹配项中。如果是这样,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);
    

    请参阅Specifying a function as a parameter 了解String.prototype.replace 方法。

    【讨论】:

      【解决方案2】:

      USING str.replace 将一次又一次地替换第一个。

      仅当您传递 /g 修饰符时才适用。不确定您的实际数据是什么,因此可能相关也可能不相关。

      在不知道您的实际数据的情况下,我想我会在这里使用 match() 而不是 exec() 并从匹配项中重建字符串。例如

      var str = "someRegex ajfgdgkjdljlgdgjlrm someRegeeeeex dfdsfj";
      var re = /someReg(.*?)x/g;
      str.match(re);
      

      生产

      ["someRegex", "someRegeeeeex"]
      

      【讨论】:

        【解决方案3】:

        首先,使用 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();

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-12
          • 2016-09-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多