【发布时间】:2013-08-13 15:42:51
【问题描述】:
我目前编写了一个简单的格式化函数来替换字符串中的一些占位符。
var format = function (a, c) {
return a.replace(/{ *([^} ]+) *}/g, function (b, a) {
b = c;
a.replace(/[^.|\[\]]+/g, function (a) {
b = b[a];
});
return b;
});
};
语法目前使用花括号表示法 {key},我现在尝试修改RegExp-模式以使用百分之一而不是%key。
var pattern = /{ *([^} ]+) *}/g;
我尝试将括号 {} 替换为百分比 %,但这仍然无法正常工作。
var pattern = /% *([^% ]+) */g;
原始模式工作在以下条件下预期:
var data = {
obj: {
foo: 'Foo',
bar: 'Bar'
},
arr: ['Foo', 'Bar']
};
var objTest = '{obj.foo}, is not equal to {obj.bar}.'
format(objTest, data) // => 'Foo, is not equal to Bar.'
var arrTest = '{arr[0]}, is not equal to {arr[1]}.'
format(arrTest, data) // => 'Foo, is not equal to Bar.'
如果我们使用我修改后的模式,似乎每个占位符替换后的最后一个字符将被删除:
'%obj.foo, is not equal to %obj.bar.' // => 'undefined is not equal to Bar'
'%arr[0], is not equal to %arr[1]' // => 'undefined is not equal to Bar'
任何想法如何修改pattern 以使其可以使用百分比% 而不是花括号{}?
【问题讨论】:
-
你需要使用%吗?您将如何处理 % 是字符串的合法部分,例如
%obj.foo% is not 10% of %obj.bar%? -
显然,
,应该结束一个标识符。然后你可以用[^%, ]替换[^% ]。但这意味着您的替换不适用于obj["a,b"]。你看,你需要真正解析 JavaScript 标识符(以及它们所有可能的嵌套),以使其正常工作。 -
这个库可以作为参考,也可以直接使用。 github.com/tarangkhandelwal/substitutor.js
标签: javascript regex replace string-formatting printf