2012-05-16 26 views
5

Ich habe Probleme bei der Bildung eines regulären Ausdrucks, die führende Nullen aus Zahlen als Strings Strips entfernt werden kann. Sorry, aber parseFloat ist nicht das, wonach ich suche, da ich mit Zahlen mit mehr als 30 Dezimalstellen zu tun habe.Verwenden Regex, um eine Nummer ohne führende Nullen in Javascript

Mein aktueller regulärer Ausdruck ist

/(?!-)?(0+)/; 

Hier sind meine Testfälle. http://jsfiddle.net/j9mxd/1/

$(function() { 
    var r = function(val){ 
     var re = /(?!-)?(0+)/; 
     return val.toString().replace(re, ''); 
    }; 
    test("positive", function() { 
     equal(r("000.01"), "0.01"); 
     equal(r("00.1"), "0.1"); 
     equal(r("010.01"), "10.01"); 
     equal(r("0010"), "10"); 
     equal(r("0010.0"), "10.0"); 
     equal(r("10010.0"), "10010.0"); 
    }); 
    test("negative", function() { 
     equal(r("-000.01"), "-0.01"); 
     equal(r("-00.1"), "-0.1"); 
     equal(r("-010.01"), "-10.01"); 
     equal(r("-0010"), "-10"); 
     equal(r("-0010.0"), "-10.0"); 
     equal(r("-10010.0"), "-10010.0");   
    }); 
}); 

Warum sind meine Testfälle nicht vorbei?

+0

Bitte geben Sie einen Einblick in was falsch eigentlich los ist, und eine tatsächliche Frage zu stellen entweder nicht schaden kann. –

+0

Die Frage ist: "Warum werden meine Tests nicht bestanden?" –

+0

Alle von ihnen? OK ... –

Antwort

4

Dies Ihr alle Fälle

var re = /^(-)?0+(?=\d)/; 
return val.toString().replace(re, '$1'); 

^ Spiele am Anfang der Zeichenfolge beendet.

(-)? passt zu einem optionalen - Dies wird wieder in den Ersetzungsstring eingefügt.

(0+)(?=\d) entspricht einer Reihe von 0 mit einer folgenden Ziffer. Der (?=\d) ist ein lookahead assertion, es stimmt nicht überein, aber stellen Sie sicher, dass eine Ziffer den führenden Nullen folgt.

+0

Was bedeutet? =? –

+0

@LarryBattle Ich habe eine Erklärung hinzugefügt – stema

1

könnten Sie Folgendes verwenden:

var r = function(val) { 
    var re = /(-)?0*(\d.*)/; 
    var matches = val.toString().match(re); 
    return (matches[1] || '') + matches[2]; 
}; 
2

Dies geht Ihre Tests und ist relativ leicht zu lesen:

var r = function(val){ 
    var re = /^(-?)(0+)(0\.|[1-9])/; 
    return val.toString().replace(re, '$1$3'); 
}; 
+0

Sehr Cleaver mit den Rückseiten. –

+0

ein Lookahead ist eine bessere Lösung - ich hätte die Antwort bearbeitet, aber Stema schlug es zuerst vor. – AD7six

Verwandte Themen