Javascript Jquery选择数组中括号之间的文本

Javascript Jquery选择数组中括号之间的文本,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个基于多个选择框中选定值的数组: 期限03(-1000),1(+1000),价格(+3000),1(+1500)-- 逗号分隔。正如您所看到的,有些值在括号中有文本。我需要将这些值放在括号中并求和,因此+和-字符应该保留 值(+1000),(+3000),(-1000)表示价格变化:+表示产品会更贵,-表示产品会更便宜。这样做的结果应该是一个数字,表明价格的变化-例如1500-产品的成本将高于基本价格,或例如3000-产品将更便宜。 提前谢谢。 Tom您有逗号分隔的值,其中包含要提取的数字

我有一个基于多个选择框中选定值的数组:

期限03(-1000),1(+1000),价格(+3000),1(+1500)--

逗号分隔。正如您所看到的,有些值在括号中有文本。我需要将这些值放在括号中并求和,因此
+
-
字符应该保留

值(+1000),(+3000),(-1000)表示价格变化:+表示产品会更贵,-表示产品会更便宜。这样做的结果应该是一个数字,表明价格的变化-例如1500-产品的成本将高于基本价格,或例如3000-产品将更便宜。 提前谢谢。
Tom

您有逗号分隔的值,其中包含要提取的数字。首先将输入拆分为一个数组,然后使用regexp为每个项提取值,例如:

/\(([+-])(\d+)\)/ //will search for a sign (+/-) and a number between parenthesis
应用于项目将导致一个数组,该数组的符号位于第二位置,数字位于第三位置

/\(([+-])(\d+)\)/.exec('Term 03 (-1000)') //--> ['Term 03 (-1000)', '-', '1000']
使用reduce对所有符号进行求和:

var changes = str.split(',').reduce(function(sum, item){
  var matches = /\(([+-])(\d+)\)/.exec(item);
  if(matches) {
   return sum + (matches[1] === '-' ? -1 : 1) * parseInt(matches[2]);
  } else {
    return sum;
  }
}, 0));

p.S.:如果您已经有一个数组,您可以删除
.split(',')
部分。

可能是这样的:

var sum = 0; 
csv.replace(/\([^)]+\)/gi, function (str) { sum += parseInt(str,10); return str; }

没有测试代码。无论如何,我的想法是使用正则表达式循环所有括号,然后在replace函数中,将匹配的字符串转换为整数,并将其添加到sum中。

我成功地使用了下面相当繁琐的代码。它对正整数和负整数都有效

var result = arr.map(function (el) {
  if (el.indexOf('(') > -1 && el.indexOf(')') > -1) {
    return Number(el.match(/\(([\+\- 0-9]*)\)/g)[0].replace(/[\(\) ]/g , ''));
  }
}).filter(function (el) {
  if (typeof el !== undefined) {
    return el;
  }
}).reduce(function (p, c) {
  return p + c;
});

如果你对正则表达式不太在行,我已经制作了一个不“使用”它们的版本,这样更容易阅读,也更容易看到正在发生的事情以及它是如何进行的。并不是说你不应该使用正则表达式

对于这个算法,我们基本上是查看每个项目,检查它们是否有有效的括号,然后如果有
+
我们在括号内添加值,否则如果有
-
我们减去(假设只有这两个):

试试看

var arr = "Term 03 (-1000),1 (+1000),Price (+3000),1 (+1500),--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--".split(",")
, sum = 0;
arr.map(function(v, k) {
  // cast `v` value as `Number` , e.g., `[-1000, 1000, 3000, 1500]`
  var n = Number(v.replace(/\w+[^\(+\d+\)]|[\(|\)]/g, "")) || null;
  // add `n` Number's at `sum` , e.g., `-1000 + 1000 + 3000 + 1500` = `4500`
  sum += n
});
// console.log(sum); // `4500`
var arr=“期限03(-1000)、1(+1000)、价格(+3000)、1(+1500)、-、-、-、-、-、-、-、-、-、-、-、-、-、-、-、-、-、-、-、-、-”拆分(“,”)
,总和=0;
arr.map(函数(v,k){
//将'v'值转换为'Number',例如,'[-1000、1000、3000、1500]`
var n=数字(v.replace(/\w+[^\(+\d+\)].[\(\\)]/g,”)|空;
//在'sum'处添加'n'数字,例如,'-1000+1000+3000+1500`='4500`
总和+=n
});
document.write(sum)/`4500`

我们没有收到您的..“括号”或括号?如果可能,可以发布实际数组文字吗?求和要求是否为
-1++1
等?
1000
1000
在数字上相同?定义
sum
在此上下文中的含义。提供真实的数组样本和预期的输出在将值粘合到字符串中之前,使用这些值可能更容易做到这一点
var arr = "Term 03 (-1000),1 (+1000),Price (+3000),1 (+1500),--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--".split(",")
, sum = 0;
arr.map(function(v, k) {
  // cast `v` value as `Number` , e.g., `[-1000, 1000, 3000, 1500]`
  var n = Number(v.replace(/\w+[^\(+\d+\)]|[\(|\)]/g, "")) || null;
  // add `n` Number's at `sum` , e.g., `-1000 + 1000 + 3000 + 1500` = `4500`
  sum += n
});
// console.log(sum); // `4500`