2016-12-04 10 views
1

数字が1つしかない場合、スクリプトはうまく動作しますが、文字列に2つ以上の数字があると問題が発生します。Javascriptの文字列で数字を検索してそれを逆にする

私の目標は、文字列内のすべての数字を見つけて、それらを逆にして、それらの場所に配置することです。

これは私のコードです:ここでは

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

逆転 '0.76'の結果は何ですか? –

+0

結果は67.0でなければなりませんが、1つの数字がうまく動作しますが、この文字列に追加の数字を挿入しようとすると、問題の内容が表示されます – Aleksey

答えて

0

Me.Name's answerで提案されている矢印機能をまだサポートしていないIEおよび古いバージョンのブラウザのサポートが必要な場合は、一致する配列を反復して値をその逆に置き換える次の関数を使用できます。

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>

結果の文字列: Test test 67.0 and add num 21 .

+0

BINGO、thnx、ループ追加))))) – Aleksey

0

は、私たちがここでやっているすべての整数(あなたが小数のサポートを追加するために、それを微調整することができます)

をキャプチャ作業スニペットは、我々は変換することです最初にjoin("")を使用して文字列にmatchesを追加します。

+""を使用しないでください。を構成してください。理由を確認するには、下の2番目のスニペットを参照してください。

文字列を逆にするには、最初にsplit("")を使用してchar配列に変換する必要があります。 reverse()は配列を反転し、join("")はそれをストリング・バックに変換します。

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"

そしてここでは、プログラムが動作していない理由として説明です。

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が回答と説明をしてくれます。逆の後に。 – Aleksey

+0

@Alekseyその場所にある数字の元の文字列は、 'test'変数の中に格納されています。また、この回答があなたの問題に役立っている場合は、他の人がこの問題が解決されたことを知るために「回答を受け入れる」ことができます。 –

0

あなたが正規表現マッチを置換したい場合は、string.replaceを使用して、場所(反転)を取るために、特定の置換を指定することができます。

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

正規表現は、それが複数の数字が続いている場合は、アカウントに.を取るために\d+(?:\.\d+)?/gに変更されます。 (必要に応じて他のバリエーションも可能です)。 replaceの2番目の引数は、置換を返す関数です。この場合、見つかったマッチの逆転。

関連する問題