我如何编写一个函数,该函数将一个参数作为一个句子并返回一个新句子,其中所有单词都被反转但保持与原始句子相同的顺序?
测试用例:
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'
答案 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('');
});
}