如何在textarea获得最大数量?

时间:2016-01-20 23:26:44

标签: javascript jquery regex

我有这样的textarea:

<textarea>
this is a test [1] also this [2] is a test
and again [3] this is a test
</textarea>

现在我需要获得[]中最大的数字。在这种情况下,我需要获得3。我怎么能这样做?

4 个答案:

答案 0 :(得分:8)

你可以这样做:

var result = Math.max.apply(Math, textarea.value.match(/\d+/g).map(Number));

打破它:

textarea.value.match(/\d+/g)

获取一个数字数组作为字符串。

.map(Number)

将数组的每个条目从字符串映射到数字。

Math.max.apply

Math.max作为this Math作为映射数组的参数调用{。}}。

编辑:我没有意识到你需要在括号之间做什么。你需要使用捕获组,现在它有点复杂了。

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);

答案 1 :(得分:2)

与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 :(得分:2)

使用此功能查找任何字符串中最大的[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;
}

样本

以下演示计算每次单击按钮时textarea中的最大数字。

它允许您使用textarea并使用不同的文本重新测试该函数。

&#13;
&#13;
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));
});
&#13;
<div>
    <textarea rows="4" cols="50" id="myTextArea">
this is a test [1] also this [2] is a test
and again [3] this is a test
    </textarea>
</div>

<div>
   <button id="myButton">Try me</button>
</div>
&#13;
&#13;
&#13;

另见{{3}}!

答案 3 :(得分:2)

您需要执行2个操作:

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));