gpt4 book ai didi

javascript - 正则表达式帮助计算字符串中的括号值

转载 作者:行者123 更新时间:2023-11-30 14:46:11 25 4
gpt4 key购买 nike

目前,我使用这段代码来计算字符串中括号值的总和...

if ((string.match(/\((\d+)\)/g)||[]).length > 0) {
var total = 0;
string.replace(/\((\d+)\)/g, function(outerValue, innerValue){
if (!isNaN(innerValue.toString().trim())) {
total = total + Number(innerValue.toString().trim());
}
});

value = total;
}

...所以字符串...

(2) dark chocolate, (2) milk chocolate, and (1) white chocolate

...总计 5.

不愿意让 well-enough 一个人呆着,我想如果我能更花哨一点并解释不同类型的操作,这样就可以写了,那会很酷。

(2) dark + (2) milk - (1) white
-or-
(2) dark and (2) milk minus (1) white

所以我将代码更改为...

if ((string.match(/\((\d+)\)/g)||[]).length > 0) {
var total = 0;
string.replace(/^\((\d+)\)|and\s\((\d+)\)|plus\s\((\d+)\)|\+\s\((\d+)\)/g, function(outerValue, innerValue){
if (!isNaN(innerValue.toString().trim())) {
total = total + Number(innerValue.toString().trim());
}
});

value = total;
}

...但 innerValue 返回未定义。当我在 regex101.com 中使用验证器进行测试时,我能够提取值,但在 Javascript 中不能。

我做错了什么?

附注显然,我的代码不完整(除了错误之外)。最终,我会列出所有可能的运算符(例如,“+”、“加”、“和”、“少”、“减”、“-”等)并检查 outerValue 中的字符串以确定运算符(operator)。而且,当然,我需要在句子中编写逗号的逻辑(例如,允许在句子中使用单个运算符并将该操作应用于每个项目)。

最佳答案

您的参数名称 (outerValue, innerValue) 并不准确。替换函数的参数是

function replace(match, p1, p2, ..., pn, offset, string)

所以你有

     p1               p2              p3            p4
| | | |
/^\((\d+)\)|and\s\((\d+)\)|plus\s\((\d+)\)|\+\s\((\d+)\)/g
|
match

因此,当您通过替换函数运行 (2) dark and (2) milk minus (1) white 时:

第一个匹配项“(2)”具有 p1=2,因为它对应于正则表达式中的第一个括号集,即第一个 组。然后你有 p2=undefined, p3=undefined, p4=undefined
下一个匹配 "and (2)"有 p1=undefined 因为这个匹配正则表达式中的第二个或组,所以 p1=undefined, p2=2, p3=undefined, p4=undefined

参见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter

关于javascript - 正则表达式帮助计算字符串中的括号值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com