[英]Replacing multiple strings
我有一個XML文件,其中包含某種語言的文本,我需要遍歷它並翻譯某些表達式。 我在考慮創建一個包含表達式的數組和一個包含替換的數組:
var searchFor = ['Foo', 'Bar'];
var replaceWith = ['Bar', 'Foo'];
有沒有什么方法可以有效地遍歷XML,用下一個數據替換第一個數組中的所有項目?
xml.each(function(){
$(this).text($(this).text().multiReplace(searchFor, replaceWith));
});
我正在尋找的是一個javascript函數,相當於PHP函數str_replace,它可以為第一個和第二個參數接收數組: http : //php.net/manual/en/function.str-replace.php
“FooBar'.multiReplace(searchFor,replaceWith); //應該返回'BarFoo'
PS:也歡迎替代解決方案。
對於一個非常簡單的實現,因為你有jQuery,你可以在回調中使用$ .each:
var txt = $(this).text();
$.each(searchFor, function(i,v){
txt.replace(v, replaceWith[i]);
});
$(this).text(txt);
如果要交換值,則必須插入您確定不存在於字符串中的標記。 例如,'## i ##'。 (在字符串中搜索正則表達式'## \\ d + ##'。如果存在,則添加封閉'#'並再次搜索,直到找到您知道字符串中不存在的標記。)
var txt = $(this).text();
var tokens = [];
$.each(searchFor, function(i,v){
var token = "##" + i + "##";
tokens.push(token);
txt.replace(v, token);
});
$.each(tokens, function(i,v){
txt.replace(v, searchFor[i]);
});
$(this).text(txt);
我找到了一個似乎工作正常的解決方案。 我使用multiReplace函數擴展了String對象,該函數將轉換映射作為參數,並返回帶有替換表達式的新字符串。
String.prototype.multiReplace = function(translations){
var regexStr = '';
var result = '';
for(var key in translations){
regexStr += key + '|';
}
regexStr = '(' + regexStr.substring(0,regexStr.length-1) + ')';
var rx = new RegExp(regexStr,'g');
result = this.replace(rx, function(match){
return translations[match.toLowerCase()];
});
return result;
}
var translations = {
'Foo':'Bar',
'Bar':'Foo'
};
text = 'FooBarFooFooBarBarFooBarFooFoo';
text = text.multiReplace(translations);
// text = "BarFooBarBarFooFooBarFooBarBar"
我有這個功能已經〜5年了。 我不知道我在哪里。
function str_replace (search, replace, subject) {
var result = "";
var oldi = 0;
for (i = subject.indexOf (search); i > -1; i = subject.indexOf (search, i)) {
result += subject.substring (oldi, i);
result += replace;
i += search.length;
oldi = i;
}
return result + subject.substring (oldi, subject.length);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.