JavaScript:如何仅反转字符串中的单词

JavaScript:如何仅反转字符串中的单词,javascript,string,function,join,reverse,Javascript,String,Function,Join,Reverse,我如何编写一个函数,它接受一个参数,即一个句子,并返回一个新句子,其中所有单词都颠倒过来,但保持与原始句子相同的顺序 测试用例: wordsReverser("This is fun, hopefully."); 将返回: "sihT si nuf, yllufepoh." 这是我到目前为止所做的,但请注意,我无法使句点和逗号保持不变。我不知道这是不是面试官的打字错误还是什么 function wordsReverser(str){ return

我如何编写一个函数,它接受一个参数,即一个句子,并返回一个新句子,其中所有单词都颠倒过来,但保持与原始句子相同的顺序

测试用例:

wordsReverser("This is fun, hopefully.");
将返回:

"sihT si nuf, yllufepoh."
这是我到目前为止所做的,但请注意,我无法使句点和逗号保持不变。我不知道这是不是面试官的打字错误还是什么

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

wordsReverser("This is fun, hopefully.");
//Output: 'sihT si ,nuf .yllufepoh'
}

很可能不是傻瓜式的

请尝试以下方法:

function wordsReverser(str){
  return str.replace(/[a-zA-Z]+/gm, function(item) {    
        return item.split('').reverse().join('');
    });
}

wordsReverser("This is fun, hopefully.");
//Output: 'sihT si nuf, yllufepoh.'
工作原理:函数将查找每个单词,并传递给将反转单词的函数(函数返回替换字符串中单词的反转单词),所有其他单词应保持与以前相同


Regex来提取空格、逗号和句点。

算法如下:

placeholder_array = [];
  result = '';
  foreach char in inputstring
    if(char !=',' || char != '.'){
         add char to placeholder_array;
    }
    else{
         result = result + reverse of placeholder_array
         placeholder_array = []
    }

   result = result + reverse of placeholder_array

如果是面试问题,我想他们更喜欢算法,而不是语言的确切语法

因此,从我看到的情况来看,您只是在反转字符串,句点和逗号与字符串相关联。我想让它工作的方法是抓取正则表达式值,用它们的索引删除它们,然后在原始索引中插入


希望这有助于

不是最漂亮的代码或最快的代码,但它可以工作

solve = (sentence) => sentence.split('').reverse().join('').split(' ').map(el => el.split('').join('')).reverse().join(' ');

对于Codewars挑战,我使用了与上面类似的解决方案,但是包含在我的正则表达式模式a中。和其他特殊字符,以确保每个字符串元素中都有一个完全相反的字符

function reverseWords(str){
    //Using replace, we can pass a regex object or literal pattern.
    //We pass this to a function as the second parameter
    //The functions return value will be used as the replacement string
    return str.replace(/[$&+,:;=?@#|'<>.^*()%!-|a-zA-Z]+/gm, function(item) {    
          return item.split('').reverse().join('');
      });
}
function reverseewords(str){
//使用replace,我们可以传递一个regex对象或文本模式。
//我们将其作为第二个参数传递给函数
//函数返回值将用作替换字符串
返回str.replace(/[$&+,:;=?@#|'。^*()%!-| a-zA-Z]+/gm,函数(项){
返回项。拆分(“”)。反向(“”)。联接(“”);
});
}

这完全是个骗局,谢谢!我也能理解它的工作原理,我很感激。所以,这只适用于逗号和句点,对吗?例如,如果字符是一个撇号和一个问号,这就是正则表达式的作用所在。@FreddieCabrera,你可以添加更多的条件,基本上是一个charsOk的排除列表,我可以看到你如何做到这一点,但是如果你有很多char,这不是很耗时吗?如果这些都是noob问题,我很抱歉,那只是因为我是一个哈哈。@FreddieCabrera,是的,这就是为什么我说他们很可能想看看你是如何逻辑地解决问题的,而不是在面试中与regex玩一些巧妙的把戏。我明白了,我会研究你的答案,以便更好地理解它。谢谢您可以使用字符组转换正则表达式:
([\s,.])
Hi-dwbra,感谢您抽出时间回答此问题。我建议对你的答案做一个小小的调整,当你说“我使用了与上述类似的解决方案”时,具体链接到你所引用的答案,以便明确你所引用的解决方案。
placeholder_array = [];
  result = '';
  foreach char in inputstring
    if(char !=',' || char != '.'){
         add char to placeholder_array;
    }
    else{
         result = result + reverse of placeholder_array
         placeholder_array = []
    }

   result = result + reverse of placeholder_array
solve = (sentence) => sentence.split('').reverse().join('').split(' ').map(el => el.split('').join('')).reverse().join(' ');
function reverseWords(str){
    //Using replace, we can pass a regex object or literal pattern.
    //We pass this to a function as the second parameter
    //The functions return value will be used as the replacement string
    return str.replace(/[$&+,:;=?@#|'<>.^*()%!-|a-zA-Z]+/gm, function(item) {    
          return item.split('').reverse().join('');
      });
}