如何反转字符串中的所有单词 in-place 也反转这些单词在字符串中的位置,同时将标点符号保留在原来的位置
How to reverse all words in a string in-place also reverse those words' place in the string, while keep punctuations in their old place
如果标题不清楚,举个例子:
输入:
'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
您可以做的是创建一个包含字符串中所有单词的数组,反转数组,然后开始用反转数组中的单词替换字符串中的每个单词。
这是一个例子:
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+$/, "")
以防止在字符串末尾包含 non-word 个字符的情况下数组末尾出现空字符串元素。
您可以使用 match
创建一个要移动的字母数组,然后 replace
and pop
来自该数组:
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'));
如果标题不清楚,举个例子: 输入:
'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
您可以做的是创建一个包含字符串中所有单词的数组,反转数组,然后开始用反转数组中的单词替换字符串中的每个单词。
这是一个例子:
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+$/, "")
以防止在字符串末尾包含 non-word 个字符的情况下数组末尾出现空字符串元素。
您可以使用 match
创建一个要移动的字母数组,然后 replace
and pop
来自该数组:
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'));