除非单词是数字,否则如何反转字符串中的单词和单词中的字母

时间:2014-09-30 17:31:18

标签: javascript arrays

Hello&很高兴和你们在一起。 我使用本网站提供的内置函数.split('').reverse().join('')成功地反转了数组,但我需要按顺序保持数字,而不是反转。是否有任何事情要做或要添加以使其排除数字被反转,或仅在反转完整数组后重新反转数字? 这是数组翻转功能,

function reversey(){
var text = document.getElementById('input').value;
text = text.replace(/\r/gi,'');
text = text.replace(/([^a-z 0-9\n])/gi,' $1 ');
text = text.split('\n').reverse().join('\n');
text = text.split('').reverse().join('');
text = text.replace(/ ([^a-z 0-9\n]) /gi,'$1');
document.getElementById('input').value = text;}

输入'是文本字段的ID。 感谢您的帮助,感谢您提前。

实施例

输入: Hello World 123.45

所需的输出: 123.45 dlroW olleH

当前输出: 54.321 dlroW olleH

3 个答案:

答案 0 :(得分:2)

"hello 123.45".split(/([^\d\.])/).reverse().join('')

答案 1 :(得分:1)

我认为您正在寻找array map function。它允许您在重新split到结果字符串之前分别处理join ted字符串的每个部分。你可以做点什么

text.split(/\r?\n/).map(function(line) {
    return line.split(/(\d*\.?\d+)/).map(function(wordOrNum, i) {
        if (i%2) // number (with odd index in the alternating list)
            return wordOrNum;
        else // word
            return wordOrNum.split('').reverse().join('');
    }).reverse().join('');
}).join("\n")

或者,将每一行拆分为单个字符或整数的标记,然后可以反转其序列:

    return line.match(/(\d*\.?\d+|.)/g).reverse().join('')

答案 2 :(得分:1)

首先,我们定义标准的字符串反转函数。

function reverse(str) { return str.split('').reverse().join(''); }

然后,

function reversey(str) {                        // Reverse a string
    return str                                  // by taking it and      
        .split(/\s+/)                           // splitting it into words
        .reverse()                              // and reversing the word order
        .map(function(word) {                   // and then changing each word
            return /^[0-9\.]+$/.test(word) ?    // if it's a number
                word :                          // into itself
                reverse(word);                  // or otherwise into its reverse
        })
        .join(" ")                              // put Humpty Dumpty back together
    ;
}

测试

> reversey("Hello World 123.45")
  "123.45 dlroW olleH"

使用它来转换DOM元素:

function reverse_input(id){
    var element = document.getElementById(id);
    element.value = reversey(element.value);
}

reverse_input('input')

注意:上面给出的reverse的实现不一定是在性能方面反转字符串的最佳方法。如果性能问题,可能会有更好的选择。