如何在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)); });