我現在寫了一個簡單的格式化函數來替換字符串中的某些佔位符。修改格式化模式以替換字符串中的佔位符
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
-pattern以百分之一,而不是%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%不是%obj.bar%'的10%? –
顯然,'''應該結束一個標識符。然後你可以用'[^%,]'替換'[^%]'。但是這意味着你的替換不能和'obj [「a,b」]'一起工作。你會發現,你需要實際解析JavaScript標識符(以及所有可能的嵌套),以使其正常工作。 –
此庫可以用作參考,也可以直接使用。 https://github.com/tarangkhandelwal/substitutor.js – Tarang