我有这样的textarea:
<textarea>
this is a test [1] also this [2] is a test
and again [3] this is a test
</textarea>
现在我需要获得[]
中最大的数字。在这种情况下,我需要获得3
。我怎么能这样做?
答案 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并使用不同的文本重新测试该函数。
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;
另见{{3}}!
答案 3 :(得分:2)
您需要执行2个操作:
\[(\d+)]
regex [(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));