2016-01-20 23 views
5

Tôi có một textarea như thế này:Cách lấy số lượng lớn nhất trong vùng văn bản?

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

Bây giờ tôi cần phải nhận được số lớn nhất mà là ở []. Trong trường hợp này tôi cần lấy 3. Làm thế nào tôi có thể làm điều đó?

+0

ge t giá trị của textarea trong một biến chuỗi, trích xuất các giá trị trong [] bằng cách sử dụng một regex, phân tích chúng thành các số và sau đó sắp xếp chúng và nhận được giá trị cao nhất. –

Trả lời

8

Bạn có thể làm:

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

Breaking nó lên:

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

Gets bạn một mảng các số như dây đàn.

.map(Number) 

Ánh xạ từng mục nhập của mảng từ một chuỗi đến một số.

Math.max.apply 

Calls Math.max với this như Math và là tham số thì mảng ánh xạ.

Chỉnh sửa: Tôi không nhận ra những gì bạn cần phải ở giữa các dấu ngoặc vuông. Bạn sẽ cần phải sử dụng một nhóm chụp cho điều đó và bây giờ nó phức tạp hơn một chút.

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

Đó là một chút khó khăn hơn để có được chuỗi các chuỗi với các con số.

Một lựa chọn khác, mà không sử dụng một nhóm chụp:

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

giải thích tuyệt vời ... vượt xa * "thử này" * +1 – charlietfl

+2

Một vấn đề với cách tiếp cận này là nó không nhận được các số bên trong '[...]'. Nó sẽ xem xét tất cả những người khác nếu họ có mặt. Ý tưởng chung là tuyệt vời, chỉ cần thêm một vài dòng nữa để có được đúng số. –

+0

@ WiktorStribiżew is right ... – stack

2

Cùng ý tưởng như giải pháp MinusFour của. Sử dụng jQuery nhưng có thể dễ dàng được thực hiện mà không cần.

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) 

Làm việc đầy đủ JSFiddle.

2

Sử dụng chức năng này để tìm ra [number] lớn nhất trong bất kỳ chuỗi:

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

Bản demo sau tính toán số lượng lớn nhất trong textarea của bạn mỗi khi bạn nhấp vào nút.

Nó cho phép bạn chơi xung quanh với vùng văn bản và kiểm tra lại hàm bằng một văn bản khác.

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

Xem thêm this Fiddle!

2

Bạn cần phải thực hiện 2 hành động:

  • Nhận tất cả các [(numbers)] với \[(\d+)] regex
  • Lấy giá trị tối đa từ các mảng kết quả (xem this post)

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

Các vấn đề liên quan