0

我有一个算术表达式,它可以在美国数字单词中有一个数字(比如 1000100 可以写成一百万一千。我需要在表达式中识别这些模式并将它们转换为它们各自的数字等价物。

我正在使用下面的代码。

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的第二个参数的函数,匹配的整个字符串和匹配的组(匹配的字符串位于正则表达式中的括号内)以及找到匹配项的第一个索引,然后执行搜索的实际字符串。

因此,在您的情况下,您可能希望更改传递给的函数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 回答