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

时间:2015-12-16 00:01:05

标签: javascript string function join reverse

我如何编写一个函数,该函数将一个参数作为一个句子并返回一个新句子,其中所有单词都被反转但保持与原始句子相同的顺序?

测试用例:

wordsReverser("这很有趣,希望如此。"); 会回来:

" 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'

7 个答案:

答案 0 :(得分:2)

function wordsReverser(str){
  return str.split(/(\s|,|\.)/).
    map(function(item) {    
        return item.split('').reverse().join('');
    }).join('');
}

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

正则表达式提取空格,逗号和句点。

答案 1 :(得分:1)

function wordsReverser(str){
  return str.split(' ').
    map(function(item) {    
        var letters = item.match(/[a-z]*/i);
    return item.replace(letters[0], letters[0].split('').reverse().join(''));
}).join(' ');

}

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

很可能不是万无一失的

答案 2 :(得分:1)

尝试这种方式:

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.'
  

工作原理: replace()函数会找到每个单词并传递给将反转单词的函数(该函数返回替换单词中的单词的反向单词)所有其他应该保持原样。

答案 3 :(得分:1)

算法将是这样的:

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

如果这是一个面试问题,我认为他们更喜欢算法而不是语言的确切语法。

答案 4 :(得分:1)

因此,从我看到的只是反转字符串,句点和逗号与字符串相关联。我正在考虑使其工作的方式是抓取正则表达式值,用它们的索引删除它们,然后在完成原始索引时插入。

希望这有帮助

答案 5 :(得分:0)

不是最好看的代码或最快的代码,但它有效。

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

答案 6 :(得分:0)

对于 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('');
      });
}