2016-03-19 15 views
0

ich auf eine Funktion arbeitet, die Summe ist, alle Zahlen aus einem Text:Summe aller Art Zahl von regulären Ausdrücken resultierende

'use strict'; 
 

 
var sum = function(text, regex) { 
 
    var match; 
 
    return !!(match = text.match(regex || /\d+/g)) ? 
 
    match.reduce(function(prev, curr) { 
 
     return +prev + +curr; 
 
    }) 
 
    : 0; 
 
} 
 

 
console.log(sum('1 12 40')); 
 
console.log(sum('10 12 40')); 
 
console.log(sum('1 12 510')); 
 
console.log(sum('LLLLLLLL')); 
 
console.log(sum('10 1'));

Und nicht funktioniert es Zahlen mit Punkten:

'use strict'; 
 

 
    var sum = function(text, regex) { 
 
     var match; 
 
     return !!(match = text.match(regex || /\d+/g)) ? 
 
     match.reduce(function(prev, curr) { 
 
      return +prev + +curr; 
 
     }) 
 
     : 0; 
 
    } 
 

 
    console.log(sum('1.10 12.40 40.30'));

Also, ich möchte um Hilfe bitten. Wie könnte ich auch Zahlen mit Zeigern zusammenfassen?

Danke.

+0

Haben Sie versucht, Ersetzen Sie '\ d +' durch '/ [\ d \.] +/g' – adeneo

Antwort

1

Verwenden Sie eine Regex, die Zahlen mit Komma passt zu

var sum = function(text, regex) { 
 
    return (text.match(regex || /\d*(?:\.\d*)?/g) || []) 
 
    .reduce(function(prev, curr) { 
 
    return prev + +curr; 
 
    }, 0); 
 
} 
 
document.write(sum('1.10 12.40 40.30'));

+1

oder'/-? \ d * (?: \. \ d *)?/g', wenn Sie auch negative Zahlen zusammenbringen möchten – MalcolmOcean

+0

Dies mag für viele Leute nicht wichtig sein, aber wenn du diese aus Strings parst, die auch Nicht-Nummern enthalten können, t Wenn du die 'reduce' Rückkehr zu' return (+ prev || 0) + (+ curr || 0) 'um nicht mit' NaN' zu enden, da diese Regex auch mit '' '' '' '' '' 'übereinstimmt. – MalcolmOcean

0

Wenn sum erwartet Zahl als String-Parameter zu sein, String.prototype.split() mit RegExp/\s/, Array.prototype.map() mit Number als Callback nutzen könnten

"use strict"; 
 

 
var sum = function(text, regex) { 
 
    var match; 
 
    return !!(match = text.split(regex || /\s/).map(Number)) ? 
 
    match.reduce(function(prev, curr) { 
 
     return prev + curr; 
 
    }) 
 
    : 0; 
 
} 
 

 
console.log(sum("1.10 12.40 40.30"));

+0

Könnte alternativ 'RegExp'' [^ \ d +.] 'Verwenden, um Zeichen zu finden, die keine Ziffer oder' .' ​​Zeichen bei '.split()' sind – guest271314

0

das Format der Eingabezeichenfolge gegeben, könnte man erste String split() verwenden, um die Werte zu teilen, dann Schleife, um die Werte zu summieren:

function sum(text) { 
 
    var arr = text.split(" "); 
 
    var total = 0; 
 
    for (var i in arr) { 
 
    if (/[\d.]+/g.test(arr[i])) { 
 
     total += parseFloat(/[\d.]+/g.exec(arr[i])); 
 
    } 
 
    } 
 
    document.write("The sum is " + total); 
 
} 
 
sum("1.10 12.40 40.30");

Verwandte Themen