JavaScript:我自己的解析器的动态正则表达式

时间:2010-02-01 14:49:57

标签: javascript regex

我正在尝试语言套件中的新方向(或者您想要用占位符调用那些多语言文本文件)。基本上,我有这样的文字:Hello, my name is %0. Welcome to %1!。这将是我的pText。

我的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 个答案:

答案 0 :(得分:4)

您不需要“动态正则表达式”,因为replace可以将函数作为参数:

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

(你应该return pText。)

答案 1 :(得分:3)

您将返回result变量,该变量包含ptext参数的初始值..

返回pText变量..

答案 2 :(得分:0)

UUhm,你返回结果而不是替换pText

答案 3 :(得分:0)

虽然您不能使用任何代码,除非您想要GPL库,gnu的gettext手册涵盖了与国际化相关的许多主题背后的基本原理。

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

编辑:我知道你只是在寻找一个神奇的正则表达式,但这还不够。

简单的例子:

  • 我有%n台电脑。
  • 我有1台电脑。

您是否知道阿拉伯语对于两件事情有特殊的时态,而中国人对所提到的事物的数量并不紧张?