如何在textarea获得最大数量?
我有这样的textarea:
现在我需要获得[]
最大的数字。 在这种情况下,我需要得到3
。 我怎样才能做到这一点?
你可以这样做:
var result = Math.max.apply(Math, textarea.value.match(/\d+/g).map(Number));
打破它:
textarea.value.match(/\d+/g)
获取一个数字数组作为字符串。
.map(Number)
将数组的每个条目从字符串映射到数字。
Math.max.apply
使用Math
作为Math
和参数映射数组调用Math.max
。
编辑 :我没有意识到你需要在括号之间做什么。 你需要使用一个捕获组,现在它有点复杂了。
var reg = /\[(\d+)\]/g, numberStrings = [ ], match; while((match = reg.exec(textarea.value)) !== null){ numberStrings.push(match[1]); } var result = Math.max.apply(Math, numberStrings.map(Number));
使用数字获取字符串数组会有点棘手。
另一种选择,不使用捕获组:
var numbersInBrackets = textarea.value.match(/\[\d+\]/g); var numbers = numbersInBrackets.map(function(x) { return Number(x.substring(1, x.length - 1)); }); var result = Math.max.apply(Math, numbers);
与MinusFour的解决方案相同。 使用jQuery但可以很容易地完成。
var content = $('textarea').val(); var contentArr = content.split(' '); var nums = []; for (var i = 0; i < contentArr.length; i++) { var txt = contentArr[i]; if (txt.match(/[\d]/)) { nums.push(Number(txt.slice(1,-1))); } } // Max number is Math.max.apply(null, nums)
全力以赴的JSFiddle 。
您需要执行2个操作:
- 使用
\[(\d+)]
正则表达式获取所有[(numbers)]
- 从结果数组中获取最大值(请参阅此文章 )
Array.max = function( array ){ return Math.max.apply( Math, array ); }; var re = /\[(\d+)]/g; var str = 'this is a test [1] also this [2] is a test\nand again [3] this is a test'; var numbers = [] while ((m = re.exec(str)) !== null) { numbers.push(Number(m[1])); } document.write(Array.max(numbers));
使用此函数可以找到任何字符串中最大的[number]
:
var biggestNumber = function(str) { var pattern = /\[([0-9]+)\]/g, match, biggest = 0; while ((match = pattern.exec(str)) !== null) { if (match.index === pattern.lastIndex) { pattern.lastIndex++; } match[1] = parseInt(match[1]); if(biggest < match[1]) { biggest = match[1]; } } return biggest; }
DEMO
每次单击按钮时,以下演示都会计算textarea中的最大数字。
它允许您使用textarea并使用不同的文本重新测试该函数。
var biggestNumber = function(str) { var pattern = /\[([0-9]+)\]/g, match, biggest = 0; while ((match = pattern.exec(str)) !== null) { if (match.index === pattern.lastIndex) { pattern.lastIndex++; } match[1] = parseInt(match[1]); if(biggest < match[1]) { biggest = match[1]; } } return biggest; } document.getElementById("myButton").addEventListener("click", function() { alert(biggestNumber(document.getElementById("myTextArea").value)); });