JavaScript: заменить набор символов другим - PullRequest
2 голосов
/ 10 сентября 2011

У меня есть многомерный массив, состоящий из латинских и берберских строк, которые я хочу использовать в качестве ссылки для замены входных данных:

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

Таким образом, если пользователь вводит «a», его следует заменить на берберское представление «ⴰ». Это заменяет только первый символ, но не все входные данные. Как я могу заменить латинские символы в массиве алфавита их парами в одном и том же массиве алфавита?

PS; если вы видите квадраты, это нормально.

Ответы [ 2 ]

10 голосов
/ 10 сентября 2011

Вам необходимо использовать регулярное выражение с глобальным параметром, установленным для замены всех экземпляров.Но вы также можете немного упростить этот код и избавиться от цикла.Вместо массивов используйте объект:

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 голос
/ 10 сентября 2011

Если вы измените:

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

для использования регулярных выражений :

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

g найдет все вхождения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...