字符串实现变量映射

方案一:

字符串变量格式要求: ‘some text {$0}’,{$n}为变量

扩展数组方法:evaluate

Array.prototype.evaluate = function(str) {
  this.map(function(item, idx) {
    var reg = new RegExp('{\\s*\\$' + idx + '\\s*}', 'g');
    str = str.replace(reg, item);
  });
  return str;
}

使用: arr.evaluate(str)

测试:

           

 

方案二:

字符串变量格式要求: ‘some text { name}’,{name}为变量

扩展字符串方法: evaluate 

String.prototype.evaluate = function(map) {
  var txt = this.toString();
  for (var key in map) {
    if (map.hasOwnProperty(key)) {
      var reg = new RegExp('{\\s*' + key + '\\s*}', 'g');
      txt = txt.replace(reg, map[key]);
    }
  }
  return txt;
}

使用: str.evaluate(map)

测试:

         

 

方案二  --  加强版:

字符串变量格式要求: ‘some text { name}’,{name}为变量,支持深度属性迭代

扩展字符串方法: evaluate 

String.prototype.evaluate = function(map, pKey, ptxt) {
  if (pKey) pKey += '.';
  else pKey = ''

  var txt = ptxt ? ptxt : this.toString();
  for (var key in map) {
    if (map.hasOwnProperty(key)) {
      if (typeof map[key] == 'object') {
        txt = this.evaluate(map[key], pKey + key, txt);
      } else {
        var reg = new RegExp('{\\s*' + pKey + key + '\\s*}', 'g');
// EL表达式版: new RegExp('\\${\\s*'+ pKey + '\\s*}','g'); txt
= txt.replace(reg, map[key]); } } }
if(!ptxt) { // 解析完成后清除没有匹配到的表达式
   var rg = new RegExp('{\\s*[a-zA-Z0-9\\.]+\\s*}','g');
// EL表达式版: new RegExp('\\${\\s*[a-zA-Z0-9\\.]+\\s*','g');
txt = txt.replace(rg,'');
}
return txt; }

 

posted @ 2019-01-08 10:25  【云】风过无痕  阅读(827)  评论(0编辑  收藏  举报