2016-12-04 82 views
1

如果我们只有一个数字,我的脚本的工作效果很好,但问题是O在一个字符串中有两个或更多个数字。在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,对于一个数字它的工作很好,但是尝试在这个字符串中插入额外的数字,并且你会看到最新的问题 – Aleksey

回答

0

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

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转换为字符串。

请勿使用+""连接阵列。看下面的第二个片段,看看为什么。

然后要反转字符串,我们必须先使用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中的第二个参数是返回替换的函数。在这种情况下,找到匹配的逆转。

相关问题