我正在尝试使用变量和参数来变换字符串来构建它。
The min length of __40 is 4. Max length is 16.
__ 40是另一个字符串键,我需要从字符串中提取键,转换它并用转换后的值(它将是键引用的字符串)替换它,为此我需要调用自定义函数[_getSentence()],可能在同一个句子中有几个键,我想做一个正则表达式,但它看起来很复杂,不是吗?另外我不知道我是否可以从正则表达式调用自定义函数,但我不这么认为。
也许拆分字符串以获取所有单词(按空格分割),每次检查单词是否以'__'开头,在这种情况下调用我的自定义函数,存储结果并用字符串替换当前单词。但是这个新字符串还可能包含我需要转换的另一个键。
这里使用的最佳算法是什么?如果有更好的解决方案,你呢?我应该工作。
我还必须处理可以发送的参数,但我不必管理子键的args。
这个函数在转换句子后由_getSentence()调用,用值替换args,但我想在这里管理子键。
/**
* Replace the tags in the text by the args.
* @param message The message.
* @param args The args to replace in the message.
* @returns {string} The string built.
*/
Lang.prototype._replaceArgsInText = function (message, args, lang) {
for (var i = 0; i < args.length; i++) {
message = message.replace((this.PATTERN_ARGS + i), args[i]);
}
// Check if some of the args was other language keys.
return message;
};
修改 的 最终解决方案:
/**
* Replace the tags in the text by the args.
* @param message The message.
* @param args The args to replace in the message.
* @returns {string} The string built.
* @private
*/
private _replaceArgsInText(message: any, args: any, lang: string): string{
for(var i = 0; i < args.length; i++){
message = message.replace((this.PATTERN_ARGS+i), args[i]);
}
// Check if some of the args was other language keys.
message = this._replaceSubKeys(message, /__\w+/g, this._languages[lang][this._FIELD_CONTENT_LANG]);
return message;
}
/**
* Replace the sub keys into the sentence by the actual text.
* @param sentence
* @param rx
* @param array
* @returns {string|void}
* @private
*/
private _replaceSubKeys(sentence, rx, array): string{
return sentence.replace(rx, function(i) {
var subSentence = array[i];
// TODO Check if that's an object or a string.
if(typeof subSentence == 'string'){
return subSentence;
}else{
console.log('not a string!')
return null;
}
});
}
答案 0 :(得分:1)
假设您在地图中将替换参数的名称作为键,您可以执行以下操作:
function replace(text, rx, map) {
return text.replace(rx, function(k) { return map[k] });
}
var res = replace(
"The min length of __40 is 4. Max length is 16.",
/__\w+/g, // regex for the substitution format
{__40: 'snake'}); // map of substitution parameters
正则表达式为/__w+/g
,以匹配参数的格式以及字符串中的所有参数。小提琴here。
我也在使用String.prototype.replace
function,它也需要一个功能。