#javascript
#javascript
Вопрос:
var str="are you okay"
Я хочу изменить эту строку следующим образом
are| you| okay|
Вот мой код
function split() {
var str = "are you okay",
res = ""
var arr = str.trim().split(/s /)
for (i = 0; i < arr.length; i ) {
res = arr[i] "|"
}
return res;
}
поэтому я не знаю, как вернуть результат, например are| you| okay|
Комментарии:
1. Что не так с вашим текущим кодом? может быть, попробовать
"| "
(с пробелом)2. Используйте это
res=str.replaceAll(' ','|');
3. @SiddhantVarma не будет работать, так как он вернет
are|||you|okay
4.ПРИМЕЧАНИЕ: ваша замена не согласована — зачем требовать
|
между словами, но только|
в конце?5.
res = str.trim().replace(/s /g, '| ') '|'
Ответ №1:
Есть более короткое решение. Сначала вы можете удалить двойные пробелы:
var str = "are you okay";
var nospaces = str.replace(/s /g,' ').trim();
а затем замените пробелы на |
:
var final_str = nospaces.replace(' ', '| ');
Комментарии:
1. или сначала выполните обрезку, а затем замените любое количество пробелов напрямую,
|
используя только один.replace
вызов.
Ответ №2:
Вы могли бы использовать комбинацию .split()
для разделения каждого пробела, .filter()
возврата слов и .join()
объединения их обратно в одно слово:
var str="are you okay";
const modifiedstr = `${str.split(/s /).filter(e=> e != '').join('| ')}|`;
console.log(modifiedstr);
Комментарии:
1. Я лично не стал бы использовать строку шаблона только для добавления конца
|
.
Ответ №3:
Это приведет к желаемому результату:
const split = (str) => str.trim().replace(/s /g, '| ') '|';
Ответ №4:
Если вы хотите продолжить этот подход, все, что вам действительно нужно, это map
немного join
в конце:
function split(str) {
return str.trim().split(/s /).map(s => `${s}| `).join('').trim();
}
console.log(split("are you okay"));
Обратите внимание, что ES6 упрощает это с помощью литералов шаблонов и функций со стрелками.
Вы также можете сделать это с помощью простого регулярного выражения, если вы склонны:
function split(str) {
return str.replace(/s /g, '| ');
}
console.log(split("are you okay"));
Где здесь /g
флаг означает «глобальный», как в «заменить все экземпляры». По умолчанию это будет просто первое.
Комментарии:
1.
.map
версия добавляет лишний пробел в конец вывода.2. @Alnitak добавил
trim()
вызов.3. @tadman конечно, это исправляет проблему, но вызов
.split
, за которым следует.map
и.join
, намного дороже, чем простое,.replace
а затем объединение файла|
.4. @Alnitak Очевидно, что существует более одного способа решения этой проблемы. Я представил здесь два случая. Первый — это более точная адаптация исходного кода.
5. Просто выполнение
.join('| ')
split
результата было бы более точной адаптацией.
Ответ №5:
Ваш код выглядит хорошо, вам нужно просто сделать это:
function split() {
var str = "are you okay",
res = ""
var arr = str.trim().split(/s /)
for (i = 0; i < arr.length; i ) {
res = arr[i] "| "; // add space after | sign
}
return res.trim(); // to remove last space
}
var string = split()
console.log(string)
Или вы можете сделать это:
function split(str) {
return str.trim().split(/s /).join('| ') '|';
}
var str = "are you okay";
var result = split(str);
console.log(result)