如何反转字符串中的所有单词也会反转这些单词'放在字符串中,同时在旧地方保留标点符号

时间:2018-03-26 04:30:47

标签: javascript arrays regex string reverse

如果标题不清楚,这是一个例子: 输入:

'hello  howis.going'

预期产出:

'ginog  siwoh.olleh'.

是否可以使用正则表达式对其进行编程?

以下是我的代码,

function fn(str) {
  return str.replace(/[^\s.]+/g, function(m) {
    return m.split('').reverse().join('');
  });
 }

 var res = fn('hello  howis.going')
 console.log('result = ', res);

现在是我的输出:

olleh  siwoh.gniog

2 个答案:

答案 0 :(得分:5)

你可以做的是创建一个包含字符串中所有单词的数组,反转数组,然后开始用反转数组中的单词替换字符串中的每个单词。

以下是一个例子:

function process(s){
  let arr = s.replace(/\W+$/, "").split(/\W+/).reverse();
  let index = 0;
  return s.replace(/\w+/g, function(){
    return arr[index++].split("").reverse().join("");
  });
}

console.log(process("hello  howis.going"));

编辑:添加.replace(/\W+$/, "")以防止数组末尾的空字符串元素用于字符串末尾包含非单词字符的情况。

答案 1 :(得分:2)

您可以使用match创建要移动的字母数组,然后使用该数组中的replacepop



function fn(str){
  var moved = /\w/g; // use moved = /[\w ]/g to also move spaces.
  var letters = str.match(moved, '');
  var altered = str.replace(moved, function(){return letters.pop();});
  return altered;
}
    
console.log(fn('hello  howis.going'));
console.log(fn('Also in ... different lengths!'));
console.log(fn('a.bb.ccc.dddd'));




如果您还想移动空格,可以将函数中的第一行更改为/[\w ]/g



function fn(str){
    var moved =  /[\w ]/g;
    var letters = str.match(moved, '');
    var altered = str.replace(moved, function(){return letters.pop();});
    return altered;
}

console.log(fn('hello  howis.going'));
console.log(fn('Also in ... different lengths!'));
console.log(fn('a.bb.ccc.dddd'));