JavaScript:用另一个字符替换一组字符

num*_*web 2 javascript arrays string replace

我有一个由拉丁语和柏柏尔字符串组成的多维数组,我想用它作为替换输入数据的参考:

var alphabet = Array (  Array( 'a', '?' ), Array( 'b', '?' ), Array( 'g', '?' ), Array( 'gw', '??' ), Array( 'd', '?' ), Array( '?', '?' ), Array( 'e', '?' ), Array( 'f', '?' ), Array( 'k', '?' ), Array( 'kw', '??' ), Array( 'h', '?' ), Array( '?', '?' ), Array( '?', '?' ), Array( 'x', '?' ), Array( 'q', '?' ), Array( 'i', '?' ), Array( 'j', '?' ), Array( 'l', '?' ), Array( 'm', '?' ), Array( 'n', '?' ), Array( 'u', '?' ), Array( 'r', '?' ), Array( '?', '?' ), Array( '?', '?' ), Array( 's', '?' ), Array( '?', '?' ), Array( 'c', '?' ), Array( 't', '?' ), Array( '?', '?' ), Array( 'w', '?' ), Array( 'Y', '?' ), Array( 'z', '?' ), Array( '?', '?' ) );                    

var word = $("input[name=word]").val();

var word_split = word.split("");

var tifinaghized = '';

for (var i = 0; i < word_split.length; i++)
{
    tifinaghized += word.replace(word_split, alphabet[i][1]);
}

$("span.generated_tifinaghe").html( tifinaghized );
Run Code Online (Sandbox Code Playgroud)

因此,如果用户键入"a",则应将其替换为"ⴰ"的柏柏尔表示.这仅替换第一个字符,但不替换整个输入数据.如何用相同字母表数组中的对替换字母数组中的拉丁字符?

PS; 如果你看到正方形,这是正常的.

gil*_*ly3 12

您需要使用设置了全局选项的正则表达式来替换所有实例.但是,您也可以稍微简化此代码并摆脱循环.而不是Arrays,使用一个对象:

var alphabet = {
    'a': '?',
    'b': '?',
    'g': '?',
    'gw': '??',
    'd': '?',
    '?': '?',
    ...
    'z': '?',
    '?': '?'
};
Run Code Online (Sandbox Code Playgroud)

然后使用带有替换函数的正则表达式:

var word = $("input[name=word]").val();
var tifinaghized = word.replace(/[abgd?efkh??xqijlmnur??s?ct?wYz?]|gw|kw/g, function(s) {
    return alphabet[s];
});
Run Code Online (Sandbox Code Playgroud)

工作演示:http://jsfiddle.net/gilly3/MdF6R/