正则表达式回调函数只执行一次

时间:2012-07-06 19:13:34

标签: javascript regex callback

所以我在搜索{x}的字符串,其中x是1-9之间的某个数字,我的regexp找到第一个出现并运行回调函数,但这只在第一个找到的实例上调用。例如,{2}某些{3} String将返回替换值x次,具体取决于括号之间的整数,因此当我希望它返回		Some{3}时函数返回		Some			String

我不太了解regexp,但是我需要添加一些内容才能在所有匹配的事件上执行回调函数吗?

这是代码

var string = "{2}Some{3}String";

function replaceWithTabs(propertyName) {  
  var regExp = new RegExp('\{[1-9]\}');
  function addTabs(match) { 

    var string = '',
        i = 0,
        length = match.substring(1,2);

    for(i; i < length; i++) {
        string += "&#09;";
    }
    return string;  
}  return propertyName.replace(regExp, addTabs);  }

1 个答案:

答案 0 :(得分:3)

请改用此RegExp字面值:

var regExp = /{[1-9]}/g;

{}不是Regular Expression中的特殊符号,因此您可以避免斜线。 RegExp的g标志表示global match,没有它,您只会替换第一个匹配,但不会替换所有匹配。首选使用literal而不是RegExp contstructor,因为它更快。如果使用RegExp构造函数,还需要转义\符号,因为斜杠是string literal中的特殊符号。考虑一下:

var regliteral = /\./;
//Similar with constructor
var regconstructor = new RegExp('\\.');  //slash is special symbol in string,so we add extra slash before it