你可以瞄準的是這樣的:
template(string, {key: value, key: value});
它可以在使用replace
回調幾行來實現:
function template(text, obj) {
var regex = /@(\w+)@/g;
return text.replace(regex, function(_, match) {
return obj[match] || _;
});
}
// Usage:
var str = 'p_id eq @[email protected] and idr_user_id eq @[email protected]';
var result = template(str, {p_id: 123, idr_user_id: 'ABC'});
//^ "p_d eq 123 and idr_user_id eq ABC"
如果您需要不同的正則表達式或結構,你可以創建一個簡單的關閉,如:
function template(regex, fn) {
return function (text, obj) {
return text.replace(regex, function(_, match) {
return fn.call(obj, match);
});
}
};
// Using an array
var myTemplate = template(/%(\d+)/g, function(x) {
return this[--x];
});
var str = 'Hello %1, foo %2';
var result = myTemplate(str, ['world', 'baz']);
//^ "Hello world, foo baz"
你正在公開一個where子句被客戶端操縱嗎?聽起來像是一個等待發生的安全問題。 – adam0101
@ adam0101,where子句由從sqlLite數據庫查詢而不是人爲輸入的值填充。 – gdex
這不起作用。 JS替換方法只需要2個參數。任何其他參數都將被忽略。您必須創建一個RegExp對象,對該字符串運行正則表達式,然後遍歷匹配。 – Bic