2016-12-04 3 views
1

Wenn wir nur eine Zahl haben funktioniert mein Skript gut, aber das Problem ist, wenn O 2 oder mehr Zahlen in einer Zeichenfolge haben.Nummer in Javascript suchen und umkehren

Mein Ziel ist es, alle Zahlen in der Zeichenfolge zu finden, sie umzukehren und an ihre Stelle zu setzen.

Dies ist mein Code:

function findNum(input) { 
    var string = input; 
    var regex = /\d+/g; 
    var matches = string.match(regex); 
    alert("BEfore reverse " + matches); 
    var reverseNum = reverseString(matches + ""); 
    var replace = /,/g; 
    var FinalResult = reverseNum.replace(replace, "."); 
    alert(FinalResult); 
    return FinalResult; 
} 

function reverseString(str) { 
    var splitString = str.split(""); 
    alert(splitString); 
    var reverseArray = splitString.reverse(); 
    alert(reverseArray); 
    var joinArray = reverseArray.join(""); 
    alert(joinArray); 
    return joinArray; 
} 

function myFunction() { 
    var DynamicTemp = "Test test 0.76 and add num ."; 
    var tmpNum = findNum(DynamicTemp); 
      var stringNum = DynamicTemp; 

      var regex = /\d+/g; 
      var matches = stringNum.match(regex) + ""; 

      var replace = /,/g; 
      var res = matches.replace(replace, "."); 

      var result = stringNum.replace(res, tmpNum); 
      DynamicTemp = result; 
    document.getElementById("demo").innerHTML = DynamicTemp; 
} 
+0

was ist das Ergebnis einer umgekehrten '0.76'? –

+0

Ergebnis muss 67,0 sein, für eine Nummer funktioniert es gut, aber versuchen Sie, zusätzliche Zahl in dieser Zeichenfolge einzufügen, und Sie werden sehen, was ein Problem – Aleksey

Antwort

0

Wenn Sie Unterstützung für IE und ältere Versionen von Browsern benötigen, die noch keine Pfeilfunktionen unterstützen (empfohlen in Me.Name's answer), können Sie die folgende Funktion verwenden, die das Übereinstimmungsarray iteriert und die Werte durch ihre Umkehrung ersetzt.

function reverseNumbers(string) { 
 
    var regex = /\d+(?:\.\d+)?/g; 
 
    var matches = string.match(regex); 
 
    var res = string; 
 
    for (var i=0; i<matches.length; i++) { 
 
    res = res.replace(matches[i], matches[i].split("").reverse().join("")) 
 
    } 
 
    document.getElementById("demo").innerHTML = res; 
 
} 
 

 
reverseNumbers("Test test 0.76 and add num 12 .");
<div id="demo"></div>

Die resultierende Zeichenfolge: Test test 67.0 and add num 21 .

+0

BINGO, thnx, nur Schleife hinzufügen)))) – Aleksey

0

Hier ist ein Arbeits Snippet, das alle ganzen Zahlen erfasst (Sie es Unterstützung für Dezimalzahl hinzuzufügen zwicken)

Was wir hier tun, ist, dass wir konvertieren matches in eine Zeichenfolge zuerst mit join("").

NICHT VERWENDEN +"", UM DAS ARRAY ZU KONZENTRIEREN. Siehe unten zum zweiten Ausschnitt, um zu sehen, warum.

Um die Zeichenfolge dann umzukehren, müssen wir sie zuerst in ein char-Array konvertieren, indem wir split("") verwenden. reverse() kehrt das Array um und join("") konvertiert es in eine Zeichenfolge zurück.

var test = "123blah456 random text 789"; 
 
var matches = test.match(/\d+/g); 
 
var matchesString = matches.join(""); 
 
var matchesArray = matchesString.split(""); 
 
var matchesArrayReversed = matchesArray.reverse(); 
 
var reversed = matchesArrayReversed.join(""); 
 
console.log(reversed); 
 
// outputs "987654321"

Und hier ist eine Erklärung dafür, warum Ihr Programm nicht funktioniert.

var matches = "123asd456fgh789".match(/\d+/g); 
 
console.log("matches = "+matches); 
 
// After you get the matches using the regex, you have an array. 
 
// matches = ["123","456","789"] 
 
//Now see what happens when you use: matches + "" 
 
console.log("matches+\"\" = "+matches+""); 
 
// matches+"" = "123,456,789" 
 
// The commas from the array are added in when you use: +"" 
 
// The better way of doing this is to use: array.join("") 
 
console.log("matches.join(\"\") = "+matches.join("")); 
 
// matches.join("") = "123456789"

+0

thnx für die Antwort und erklären, können Sie mir helfen, sie wieder auf ihre Plätze zu string , nach der Umkehrung. – Aleksey

+0

@Aleksey Die ursprüngliche Zeichenfolge mit den Nummern an ihren Stellen wird in der 'test'-Variablen gespeichert.Auch wenn diese Antwort Ihrem Problem geholfen hat, können Sie "Antwort annehmen", so dass andere wissen, dass dieses Problem gelöst wurde. –

0

Wenn Sie Regex-Übereinstimmungen ersetzen möchten, können Sie auch string.replace verwenden und den spezifischen Ersatz angeben stattzufinden (Umkehr).

const reverseNumbers = str => str.replace(/\d+(?:\.\d+)?/g, m => m.split('').reverse().join('')); 
 
console.log(reverseNumbers("Test test 0.76 and add 123."));

Die Regex \d+(?:\.\d+)?/g geändert wird . zu berücksichtigen, wenn es um mehr Ziffern folgt. (andere Variationen möglich, je nach Bedarf). Das zweite Argument in replace ist die Funktion, die die Ersetzung zurückgibt. In diesem Fall eine Umkehrung der gefundenen Übereinstimmung.