JavaScript: динамическое регулярное выражение для моего собственного парсера - PullRequest
1 голос
/ 01 февраля 2010

Я пробую новое направление в языковых наборах (или как вы хотите назвать эти многоязычные текстовые файлы с заполнителями). По сути, у меня есть такой текст: Hello, my name is %0. Welcome to %1!. Это был бы мой текст.

My pValues ​​- это массив, значения которого представляют% 0 и% 1.

Следующая функция должна найти% 0 и заменить его на pValues ​​[0] и т. Д.

function _parseDialogMessage(pText, pValues) {
    var result = pText;
    for (var i=0; i<pValues.length; ++i) {
        var regex = new RegExp('\%'+i, 'gi');
        pText = pText.replace(regex, pValues[i]);
    }
    return result;
}

Все это работает, за исключением того факта, что оно не заменяет заполнители% 0 и% 1. Все переменные имеют ожидаемые значения, но .replace, похоже, не находит мои заполнители.

Любая помощь?

Редактировать 1

Позор мне ... -.-

Ответы [ 4 ]

4 голосов
/ 01 февраля 2010

Вам не нужно "динамическое регулярное выражение", поскольку replace может принимать функцию в качестве аргумента:

function _parseDialogMessage(pText, pValues) {
  return pText.replace(/%(\d+)/g, function (s, i) { return pValues[i]; });
}

(а вам следует return pText.)

3 голосов
/ 01 февраля 2010

Вы возвращаете переменную result, которая содержит начальные значения параметра ptext.

возвращает переменную pText.

0 голосов
/ 01 февраля 2010

Хотя вы не можете использовать ни один из их кодов, если не хотите использовать GPL для своей библиотеки, руководство по gettext для gnu содержит обоснование ряда тем, касающихся интернационализации.

http://www.gnu.org/software/gettext/manual/gettext.html

edit: Я знаю, что вы просто ищете магическое регулярное выражение, но этого будет недостаточно.

простой пример:

  • У меня% n компьютеров.
  • У меня 1 компьютер.

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

0 голосов
/ 01 февраля 2010

Ммм, вы возвращаете результат, а не заменяете pText

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