在字符串中检测并反转一个数字

3
孤独的开发者在这里。 寻找一些想法,以便能够检测字符串中的数字并翻转这些数字的字符顺序。例如,给定字符串:
'Lorem ipsum dolor 345 sit $4.50 amet,78% consectetur 45.60%adipisicing elit'  

生成的字符串将是:
'Lorem ipsum dolor 543 sit 05.4$ amet,%87 consectetur %06.54adipisicing elit'  
技巧是识别整数部分,其中可能包括货币符号、百分比符号、点或逗号小数分隔符和千位分隔符。我想能够反转与数字相关的子字符串的子段。 你有什么想法吗?

2
纯粹出于兴趣 - 你为什么想要这样做? - net.uk.sweet
这是一个奇怪的用例,但它与从右到左的文本、拆分选择和以正确方向显示数字有关。 - paligap
哦,我的天啊!几年前我们在ActionScript中必须自己实现希伯来语的从右到左解析。我理解你的痛苦。 - net.uk.sweet
4个回答

2

这可能是一个适合使用正则表达式的好任务:

var result = input.replace(/\$?[0-9]+(\.[0-9]+)?%?/g,
                           function(s) { return s.split('').reverse().join(''); });

Demo: http://jsfiddle.net/6A3Nn/2/


谢谢。你能给我解释一下正则表达式吗,这样我就可以扩展它了。例如,给定字符串'.1234',它不会得到'.4321'。 - paligap

1
str = str.replace(/[0-9.$%]+/g, function(x) {
    return x.split('').reverse().join('')
});

{{链接1:FIDDLE}}


1
由于某种原因,他想让百分号(%)和美元符号($)也移到另一端。我认为你需要把它们也加上。 - Damon Smith

0
有点粗糙,但应该可以工作。
function reverseNumInStr(str){
  var wordArray = str.split(' ');

  var newList = [];
  wordArray.forEach(function(word){
    var newWord = word.replace("$","").replace(".","").replace("%","").replace(",","");

    var num = parseFloat(newWord);

    if(!isNaN(num)){
      newList.push(word);
    }else{
      newList.push(reverseStr(word));
    }

  });

  return newList.join(" ");
}

function reverseStr(s){
    return s.split("").reverse().join("");
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接