Javascript 计算字符串中括号内的数字

Javascript 计算字符串中括号内的数字,javascript,regex,Javascript,Regex,我有一个特殊的字符串,如下所示 *WTY: but the light of the dining room suddenly turn off . %mor: conj|but det|the n|light prep|of det|the adj|dining n|room adv|suddenly v|turn adv|off . %snd: <00:14:74><00:25:53> %WTY: {and} rpl but {suddenly} rp

我有一个特殊的字符串,如下所示

*WTY:   but the light of the dining room suddenly turn off .
%mor:   conj|but det|the n|light prep|of det|the adj|dining n|room adv|suddenly v|turn adv|off .
%snd:   <00:14:74><00:25:53>
%WTY:   {and} rpl but {suddenly} rpl (0.43) {the} * (1.07) {the light (0.78) suddenly turn off and} # (1.24) the light of the dining room suddenly turn off . err_m_s err_m_l ::: |
您可以尝试以下方法:

/\((\d*\.?\d*)\)/g

const regex=/\((\d*\.?\d*)\)/g;
但是餐厅的灯突然熄灭了。
%莫尔:但是,餐厅和房间的灯光准备突然关闭了。
%snd:
%WTY:{和}rpl但是{突然}rpl(0.43){the}*(1.07){灯(0.78)突然熄灭,餐厅的灯突然熄灭。错误的错误:错误的错误:`;
让m;
var=0.0;
while((m=regex.exec(str))!==null){
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//console.log(m[1]);
val+=parseFloat(m[1]);
}
控制台日志(val)您可以尝试以下方法:

/\((\d*\.?\d*)\)/g

const regex=/\((\d*\.?\d*)\)/g;
但是餐厅的灯突然熄灭了。
%莫尔:但是,餐厅和房间的灯光准备突然关闭了。
%snd:
%WTY:{和}rpl但是{突然}rpl(0.43){the}*(1.07){灯(0.78)突然熄灭,餐厅的灯突然熄灭。错误的错误:错误的错误:`;
让m;
var=0.0;
while((m=regex.exec(str))!==null){
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//console.log(m[1]);
val+=parseFloat(m[1]);
}

控制台日志(val)没有结果的主要原因是没有考虑数字中的点,因此错过了所有非整数。一旦您纠正了这个错误,您仍然只会得到一个结果,因为您没有在正则表达式中指定全局修饰符(
g

您可以使用以下三步转换:

const sum = s.match(/\([\d.]+(?=\))/g) // get the numbers
             .map( a => +a.substr(1) ) // remove opening parenthesis and convert to number
             .reduce( (a,b) => a+b );  // total them
演示:

const s=`*WTY:但是餐厅的灯突然熄灭了。
%莫尔:但是,餐厅和房间的灯光准备突然关闭了。
%snd:
%WTY:{和}rpl但是{突然}rpl(0.43){the}*(1.07){灯(0.78)突然熄灭,餐厅的灯突然熄灭。错误的错误:错误的错误:`;
const sum=s.match(//\([\d.]+(?=\)/g)//获取数字
.map(a=>+a.substr(1))//删除左括号并转换为数字
.减少((a,b)=>a+b);//合计

console.log(sum.toFixed(2))没有结果的主要原因是没有考虑数字中的点,因此错过了所有非整数。一旦您纠正了这个错误,您仍然只会得到一个结果,因为您没有在正则表达式中指定全局修饰符(
g

您可以使用以下三步转换:

const sum = s.match(/\([\d.]+(?=\))/g) // get the numbers
             .map( a => +a.substr(1) ) // remove opening parenthesis and convert to number
             .reduce( (a,b) => a+b );  // total them
演示:

const s=`*WTY:但是餐厅的灯突然熄灭了。
%莫尔:但是,餐厅和房间的灯光准备突然关闭了。
%snd:
%WTY:{和}rpl但是{突然}rpl(0.43){the}*(1.07){灯(0.78)突然熄灭,餐厅的灯突然熄灭。错误的错误:错误的错误:`;
const sum=s.match(//\([\d.]+(?=\)/g)//获取数字
.map(a=>+a.substr(1))//删除左括号并转换为数字
.减少((a,b)=>a+b);//合计

console.log(sum.toFixed(2))非常感谢。这很有效。还有一件事,如果我只需要在:;,之前或之后计算括号的总和,该怎么办(包括:;:a,:;:b,:;:a)。例如,看看这把小提琴,它确实值得一个新问题。它还需要更多的规范,比如是否要查找
:;:,和/或是否有一个
:;:
同时对前后的值产生影响,如果
:;:后面跟着一个
c
d
è
。。。如你所见,还有很多需要解释的地方:最好有明确的规格,以及你在一个新问题上的尝试(很重要!)。非常感谢。这很有效。还有一件事,如果我只需要在:;,之前或之后计算括号的总和,该怎么办(包括:;:a,:;:b,:;:a)。例如,看看这把小提琴,它确实值得一个新问题。它还需要更多的规范,比如是否要查找
:;:,和/或是否有一个
:;:
同时对前后的值产生影响,如果
:;:后面跟着一个
c
d
è
。。。如你所见,还有很多需要解释的地方:最好有明确的规格,以及你在一个新问题上的尝试(很重要!)。非常感谢你。你是个救生员:)非常感谢你。你是个救生员:)