在Javascript字符串中查找数字并将其反转

时间:2016-12-04 08:09:22

标签: javascript

如果我们只有一个数字,我的脚本效果很好,但问题是如果O在一个字符串中有2个或更多数字。

我的目标是找到字符串中的所有数字,将它们反转并将它们放在它们的位置。

这是我的代码:

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;
}

2 个答案:

答案 0 :(得分:0)

这是一个捕获所有整数的工作代码段(您可以调整它以添加对十进制数的支持)

我们在这里做的是我们首先使用matchesjoin("")转换为字符串。

请勿使用+""来加强阵列。请参阅下面的第二个片段,了解原因。

然后要反转字符串,我们必须先使用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"




答案 1 :(得分:0)

如果您需要支持尚未支持箭头功能的IE和旧版本的浏览器(在Me.Name's answer中建议),您可以使用以下函数迭代匹配数组并用反向替换值。



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 .");
&#13;
<div id="demo"></div>
&#13;
&#13;
&#13;

结果字符串:Test test 67.0 and add num 21 .