我有一个算术表达式,可以在美国数字中有一个数字(如1000100可以写成一百万一千。我需要在表达式中识别这些模式并将它们转换为各自的数字等价物。
我正在使用下面的代码。
var patternToExtractOperand = '\+|-|\*|\/|%\sof|%|\(|\)';
expr = expr.replace(/patternToExtractOperand(.+?)patternToExtractOperand/g,word2number($1));
word2number是一个函数,它将任意数字的字表示转换为(10 ^ 68)到它各自的数字等价物,而patternToExtractOperand是使用支持的模式准备的列表。
写上面这段代码的正确方法是什么? 要么 如何使用javascript替换变量模式?
答案 0 :(得分:0)
示例:强>
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");