2

所以我正在为 {x} 搜索一个字符串,其中 x 是 1-9 之间的某个数字,我的正则表达式找到第一个出现并运行回调函数,但这仅在第一个找到的实例上调用。例如,{2}Some{3}String 将根据括号之间的整数返回替换值 x 次,因此该函数		Some{3}在我希望它返回时返回		Some			String

我不太了解正则表达式,但是否需要添加一些东西才能在所有匹配的事件上执行回调函数?

这是代码

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);  }
4

1 回答 1

3

请改用此RegExp文字:

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

{or}不是特殊符号,Regular Expression因此您可以避免使用斜线。gRegExp 的标志意味着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
于 2012-07-06T19:16:35.137 回答