2011-09-09 75 views
2

我有一個多維陣列組成,我想作爲參考,用來替換輸入數據拉丁和柏柏爾字符串:的JavaScript:替換字符集合與另一個

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); 

因此,如果用戶鍵入「一個「應該由它的柏柏爾代表」ⴰ「代替。這隻替換第一個字符,而不是整個輸入數據。 我怎樣才能將字母數組中的拉丁字符替換成同一個字母數組中的對呢?

PS;如果你看到方塊,這是正常的。

回答

10

您需要使用全局選項設置的正則表達式替換所有實例。但是,您也可以簡化這些代碼並擺脫循環。相反陣列,使用對象:

var alphabet = { 
    'a': 'ⴰ', 
    'b': 'ⴱ', 
    'g': 'ⴳ', 
    'gw': 'ⴳⵯ', 
    'd': 'ⴷ', 
    'ḍ': 'ⴹ', 
    ... 
    'z': 'ⵣ', 
    'ẓ': 'ⵥ' 
}; 

然後使用正則表達式以替換功能:

var word = $("input[name=word]").val(); 
var tifinaghized = word.replace(/[abgdḍefkhḥɛxqijlmnurṛɣsṣctṭwYzẓ]|gw|kw/g, function(s) { 
    return alphabet[s]; 
}); 

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

+1

+1我最喜歡的重構的形式之一。 –

+0

+1 Thanx gilly3!這就是我所說的重播大師! – numediaweb

1

如果更改:

tifinaghized += word.replace(word_split, alphabet[i][1]); 

使用regular expressions

tifinaghized += word.replace(new RegExp(word_split, 'g'), alphabet[i][1]); 

對於g會發現所有出現。

相關問題