0

私は、アメリカの数字の単語で数字を持つことができる算術式を持っています (1000100 は 100 万と書くことができます。式でそのようなパターンを識別し、それらをそれぞれの数値に相当するものに変換する必要があります。

以下のコードを使用しています。

var patternToExtractOperand = '\+|-|\*|\/|%\sof|%|\(|\)';
expr = expr.replace(/patternToExtractOperand(.+?)patternToExtractOperand/g,word2number($1));

word2number は、(10^68) までの数値の単語表現をそれぞれの数値に変換する関数であり、patternToExtractOperand は、サポートされているパターンを使用して作成されたリストです。

上記のコードを記述する正しい方法は何ですか? またはjavascriptを変数パターンに置き換える方法は?

4

1 に答える 1

0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameterをお読みください。

例:

var patternToExtractOperand = "\\s*([A-Za-z]+)(\\d*)";
var regExp = new RegExp(patternToExtractOperand, "g");
console.log("   Welcome123 Welcome321".replace(regExp, function() {
        console.log(arguments);
        return arguments[1];
    }));

出力

{ '0': '   Welcome123',
  '1': 'Welcome',
  '2': '123',
  '3': 0,
  '4': '   Welcome123 Welcome321' }
{ '0': ' Welcome321',
  '1': 'Welcome',
  '2': '321',
  '3': 13,
  '4': '   Welcome123 Welcome321' }
WelcomeWelcome

説明

一致する場合は常に、replaceの 2 番目の引数として指定された関数が呼び出され、一致した文字列全体と一致したグループ (正規表現の括弧内にある一致した文字列) と、一致が見つかった最初のインデックスと、検索が実行された実際の文字列。

したがって、あなたの場合、渡される関数replaceを次のように変更することをお勧めします。

result = stringToBeSearched.replace(regExp, function(entireMatch, firstMatchedGroup, secondMatchedGroup) {
        return word2number(secondMatchedGroup);
    });

は次のregExpように構築されます

var patternToExtractOperand = "\\+|-|\\*|\\/|%\\sof|%|\\(|\\)";
var regExp = new RegExp(patternToExtractOperand + '(.+?)' + patternToExtractOperand, "g");
于 2013-10-02T06:47:35.423 に答える