拆分字符串并保留分隔符

时间:2014-03-25 18:16:25

标签: javascript

我试图拆分这样的字符串:" abcde $ {variable} zzz"

我想拆分字符串,以便用值替换变量。我不会提前知道变量名称是什么,这就是为什么我试图避免使用"替换"。

4 个答案:

答案 0 :(得分:2)

当您实际处理某些预定义对象(包含所有数据)的属性时,这是相当微不足道的。例如:

var data = {
  foo: 'FOOFOO',
  bar: 'BARBAR'
};
var tplFoo = "abcde${foo}fghz";
var tplBar = "abcde${bar}fghz";
var tplBaz = "abcde${baz}fghz";
[tplFoo, tplBar, tplBaz].forEach(function(tpl) {
  console.log(
    tpl.replace(/\$\{([^}]+)}/g, function(match, gr) {
      return gr in data ? data[gr] : match;
    })
  );
});

// ... this gives you:
// abcdeFOOFOOfghz
// abcdeBARBARfghz
// abcde${baz}fghz

这或多或少是模板功能的工作原理。您可以使用全局变量执行相同的操作(因为它们可以通过全局对象访问)。例如:

// on the global level
var foo = 'FOOFOO';
var bar = 'BARBAR';
...
tpl.replace(/\$\{([^}]+)}/g, function(match, gr) {
  return gr in window ? window[gr] : match;
})

甚至可以使用本地人,但你必须在这里使用eval

(function(){
  var foo = 'FOOFOO';
  var bar = 'BARBAR';

  var tplFoo = "abcde${foo}fgh${foo}z";
  var tplBar = "abcde${bar}fghz";
  var tplBaz = "abcde${baz}fghz";
  [tplFoo, tplBar, tplBaz].forEach(function(tpl) {
    console.log(
      tpl.replace(/\$\{([^}]+)}/g, function(match, gr) {
        'use strict';
        try {
          var v = eval(gr);
          return v;
        }
        catch(_) { 
          return match; 
        }
      })
    );
  });
})();

......即使在这种简单的情况下,也可能导致非常不必要的后果。

答案 1 :(得分:0)

这样的东西?

var str = "abcde${variable}zzz"
var key = str.match(/\$\{.*\}/g);
var listOfelements = str.split(key[0]);

如果您有多个变量,则可能需要执行额外的操作

答案 2 :(得分:0)

var config = {
    'foo': 'abc'
};

var str = 'foo: ${foo} bar: ${bar}';

var matches = str.match(/(\$\{\w+\})/g);

if(matches !== null) {
    for(var i=0,l=matches.length;i<l;i++) {
        var token = matches[i];
        var tvar = token.substr(2,token.length-3);

        if(tvar in config) {
            str = str.replace(token,config[tvar]);
        }
        else {
            str = str.replace(token,'null');
        }
    }
}

console.log(str);

答案 3 :(得分:0)

这是你在找什么?

var x = "abcde${variable}zzz";
alert(x.replace(/{.*}/, 'new_word'));

或者,如果你想要它与索引有关我在SO本身找到答案..这里是link