我正在编写一个微模板脚本,其中部分字符串被替换为对象选项。这是一个简短的例子:
var person = {name:"Smith",age:43};
var string = "I am {name} and I am {age} years old";
document.write(string.replace(/{([\s\S]+?)}/g,(person['$1']||"")));
document.write("<br/>");
document.write(string.replace(/{([\s\S]+?)}/g
, function($0,$1){return person[$1]||"";}));
同样在JS Fiddle
第二个表达式工作正常,但不是第一个。有人可以解释为什么吗?我认为$1
可以直接用作字符串中的反向引用。