我试图拆分这样的字符串:" abcde $ {variable} zzz"
我想拆分字符串,以便用值替换变量。我不会提前知道变量名称是什么,这就是为什么我试图避免使用"替换"。
答案 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