簡體   English   中英

替換多個字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM