Как мне написать функцию, которая принимает один аргумент, являющийся предложением, и возвращает новое предложение, в котором все слова обращены, но сохраняются в том же порядке, что и исходное предложение?
Прецедент:
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'
5 ответов
Попробуйте так:
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()
найдет каждое слово и передаст функции, которая обратит слово (функция возвращает обратное слово, которое заменяет слово в строке), и все остальные должно остаться так, как было раньше.
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.'
Скорее всего, не дурак
Итак, из того, что я вижу, вы просто переворачиваете строку, точка и запятая связаны со строкой. Я думаю о том, как заставить это работать, захватывая значения 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
Если это вопрос собеседования, я думаю, что им больше нравится алгоритм, чем точный синтаксис языка.
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.
Regex для извлечения пробелов, запятых и точек.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.