Highest score on the field Introduction
Let a field be a rectangle filled with only the characters - and [0-9]. An example of a field is:
11-011123
111-010--
0010---01
111-01234

You see that this field has been separated into three smaller areas:

To calculate the score of a smaller area, we just add all numbers up. For example:
11
111
0010
111

1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 = 9

The total score for this area is 9. We now do the same thing for the second area:
   011123
    010

0 + 1 + 1 + 1 + 2 + 3 + 0 + 1 + 0 = 9

The total score is also 9. Now we have to examine the last area:
       01
    01234

0 + 1 + 0 + 1 + 2 + 3 + 4 = 11

This has a total score of 11. The highest score on the field is 11, so this is what we need to output.
The Task
Given a field (in the form of a 2D string, an array, etc.), output the highest score on the field. You may assume that the given fields will always contain at least 1 digit. This is code-golf, so the submission with the least amount of bytes wins!
Test cases
Test case 1:
Input:
1

Output:
1

Test case 2:
Input:
1-1-1-1
-1-1-1-
2-1-1-1
-1-1-1-

Output:
2

Test case 3:
Input:
12-45-
4-65-9
87-654
12-487
45----
684764

Output:
69

Test case 4:
Input:
111-12
------
21--10

Output:
3
JavaScript (ES6), 157 bytes

s=&gt;[...o=s].map((n,i)=&gt;o=n&lt;'.'|(a=[...s]).map(_=&gt;a.map((c,j)=&gt;c&gt;'-'&amp;c&lt;10&amp;(a[j+1]|a[j-1]|a[j+l]|a[j-l])&gt;90?a[n-=-c,j]=99:0),a[i]=99)|o&gt;n?o:n,l=~s.search`
`)|o


Explanation

Takes an input field as a string. For each number in the field, sums all numbers in the area. It does this by iterating over each number in the field multiple times, adding the number to the score if an adjacent cell contains a previously counted number. Counted numbers that are part of the area are represented by setting them to 99 so that they are not counted again. Outputs the highest score as a number.



var solution =

s=&gt;
  [...o=s].map((n,i)=&gt;o=n&lt;'.'|             // for each number on the field
                                           // n = area score
      (a=[...s])                           // a = array of each field character
      .map(_=&gt;                             // loop to ensure whole area is found
        a.map((c,j)=&gt;                      // for each cell c at index j
          c&gt;'-'&amp;c&lt;10&amp;                      // if the current cell is a number
          (a[j+1]|a[j-1]|a[j+l]|a[j-l])&gt;90 // and an adjacent cells is in the area
          ?a[n-=-c,j]=99:0                 // add the cell to the area
        ),                                 // and the number to the score
        a[i]=99                            // mark the starting cell as counted
      )
      |o&gt;n?o:n,                            // o = output (max of o and n)
    l=~s.search`
`                                          // l = line length of field
  )
  |o                                       // return o
&lt;textarea id="input" rows="6" cols="40"&gt;12-45-
4-65-9
87-654
12-487
45----
684764&lt;/textarea&gt;&lt;br /&gt;
&lt;button onclick="result.textContent=solution(input.value)"&gt;Go&lt;/button&gt;
&lt;pre id="result"&gt;&lt;/pre&gt;