используйте js изменить var str=»ты в порядке» на are| you| okay|

#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)