Создать функцию для удаления всех пробелов в строке в JavaScript? - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь построить функцию для удаления пробелов с обоих концов строки (включая \ n, \ t) без использования встроенных функций (например, trim (), replace (), split (), join ()))

Аналогично следующему коду, но без .replace:

function myTrim(x)     
{
  return x.replace(/^\s+|\s+$/gm,'');  
} 

function myFunction()
{
  var str = myTrim("    Hello World!   \t ");
}

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

Здесь используется Regexp.exec:

var re = /^\s*(\S[\S\s.]*\S)\s*$/gm;

function trim(str) {
  var b = re.exec(str);
  return (b !== null) ? (re.exec(str),b[1]) : '';
}

console.log('['+trim("Hello World!")+']')
console.log('['+trim("     Hello World!")+']')
console.log('['+trim("Hello World!  \t 	 ")+']')
console.log('['+trim("     Hello World!  \t 	 ")+']')

Следует отметить, что вы должны повторно вызвать re.exec, если первый результат был ненулевым, чтобы очистить буфер функций.

0 голосов
/ 19 марта 2019

Если вы хотите избежать встроенных функций, вам придется перебирать вашу строку.

Вот способ сделать это, перебирая строку 3 раза:

  1. Первый раз удалить ведущие пробелы
  2. Затем удалить конечные пробелы путем итерации в обратном порядке
  3. А затем в последний раз перевернуть инвертированную строку, сгенерированную последним шагом

function myTrim(str) {
  const isSpace = c => c === ' ' || c === '\n' || c === '\r' || c === '\t';
  const loop = (str, fn) => { for (const c of str) fn(c) };
  const loopReverse = (str, fn) => { for (let i = str.length - 1; i >= 0; --i) fn(str[i]) };
  
  let out = '';
  let found = false;
  loop(str, c => {
    if (!isSpace(c) || found) {
      found = true;
      out += c;
    }
  });
  
  found = false;
  let reversed = '';
  loopReverse(out, c => {
    if (!isSpace(c) || found) {
      found = true;
      reversed += c;
    }
  });
  
  out = '';
  loopReverse(reversed, c => out += c);
  return out;
} 

console.log(`[${myTrim('  \n  Hello World!   \t ')}]`);
console.log(`[${myTrim('Hello World! \n  \t ')}]`);
console.log(`[${myTrim('Hello World!')}]`);
0 голосов
/ 19 марта 2019

Если я правильно понял.Попробуйте это.

x.replace(/[\n\t ]/g, "");
...