Jquery 选择数组中括号之间的文本
Jquery selecting text between parentheses in an array
我有一个基于多个选择框中的选定值的数组:
期限 03 (-1000(,1 (+1000(,价格 (+3000(,1 (+1500(,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--,--
逗号分隔。如您所见,某些值在括号中带有文本。我需要将这些值放在括号中并求和,因此+
和-
字符应保留。
(+3000(、(-1000( 表示价格变化:+ 表示产品会更贵, - 表示产品会更便宜。其结果应该是一个数字,表示价格的变化 - 例如 1500 - 产品的成本将高于基本价格,或例如 -3000 - 产品会更便宜。提前谢谢。汤姆
您有逗号分隔的值,其中有数字要提取。首先将输入拆分为数组,然后对于每个项目,使用正则表达式提取值,例如:
/'(([+-])('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));
PS:如果你已经有一个数组,你可以删除.split(',')
部分。
如果您不太
擅长正则表达式,我制作了一个不"使用"它们的版本,这样它更具可读性,更容易看到正在发生的事情以及它是如何做到的。并不是说你不应该使用正则表达式。
对于这个算法,我们基本上是查看每个项目,检查它们是否有有效的括号,然后如果我们有+
我们将值加在括号内,否则如果我们有-
我们减去(假设这是您可以拥有的唯一两个(:
for(items in array) {
var firstPar = array[items].indexOf("(");
var secondPar = array[items].indexOf(")");
// Check of the item has parentheses and are like this (...)
if( (firstPar > 0 && secondPar > 0) && (secondPar > firstPar) ) {
// Get the number from the string
var value = array[items].substring(firstPar+2, secondPar);
value = parseInt(value); // To Number
if( array[items].charAt(firstPar+1) == '+')
ProductPrice += value; // If "+" add
else
ProductPrice -= value;// If "-" subtract
}
}
这里的例子
也许是这样的:
var sum = 0;
csv.replace(/'([^)]+')/gi, function (str) { sum += parseInt(str,10); return str; }
没有测试代码。无论如何,想法是使用正则表达式循环所有括号,然后在替换函数中,将匹配的字符串转换为整数并将其添加到总和中。
我设法让它与下面相当繁琐的代码一起工作。它确实适用于正整数和负整数。
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 = "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
});
document.write(sum) // `4500`
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
相关文章:
- 浏览器之间的文本区域更新方式不同
- 有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出
- 使用javascript获取标记之间的文本
- 谷歌应用程序在两个标签之间编写目标文本
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- 如何使用JavaScript Regex替换字符串中双引号之间的文本
- 使用 JavaScript 中的正则表达式替换大文本中两个字符之间的每个出现的字符串
- j查询在多个文本框之间指定
- 在<选项>标签之间切换时保存输入文本
- 文本未在边框之间居中
- 阅读标签之间的文本
- 在jQuery或JavaScript中获取两个字符串之间的文本
- 循环字符串以查找字符集之间的文本
- 如何使用javascript将文本框中的值限制为1-999之间的值范围
- 使用javascript接受1-999之间的值的文本框
- 在javascript中使用regex只选择标记之间的文本
- 获取javascript中以a到Z之间的特定字符开头的第一个文本的位置
- 需要正则表达式使文本在*bold之间
- 如何获取两个容器之间的文本
- 如何获取javascript中两个文本框之间的天数