Преобразовать строчку, удалить пробелы

Есть строчка:

const txt = '    #text # textx   saad #asadsas   '

Как лучше всего выполнить 3 операции

  1. удалить пробелы в начале строки
  2. Удалить все пробелы что после символа #
  3. Заменить все пробелы, что равно и более 2, на одинарные пробелы

Ответы (3 шт):

Автор решения: Faraday

Конкретно для указанной строки:

const str = "  #text # textx   saad #asadsas   "
const result1 = str.trim(' ')
const result2 = str.replace('# ', '#')
const result3 = str.replace('  ', ' ')
→ Ссылка
Автор решения: ksa

Как лучше всего выполнить 3 операции

Предложу такой вариант...

Добавил еще замену нескольких # подряд на одну #.

const s = '    #text # textx   ###test1    ###  test2   saad #asadsas   '
const r = /(?<=^|#)\s+|(\s+|#+)(?=\1)/g
console.log('"%s"', s.replace(r, ''))

→ Ссылка
Автор решения: Stanislav Volodarskiy
задача то есть ...
удалить пробелы в начале строки
... удалить все пробелы после начала строки
Удалить все пробелы что после символа #
... удалить все пробелы после решётки
Заменить все пробелы, что равно и более 2, на одинарные пробелы
... удалить все пробелы после пробела

Все три задачи сведены к общей форме, которая решается так:

// символы после которых нужно удалять пробелы в группе
//              |
//              |   повторить много раз
//              |        |
//              v        v
//           --------    -
txt.replace(/(^|\s|#)\s+/g, '$1')
//                   ---     --
//                    ^      ^
//                    |      |
//                    |   оставить только группу в круглых скобках
//                    |
//        пробелы, которые будут удалены
$ node
Welcome to Node.js v18.19.0.
Type ".help" for more information.
> const txt = '    #text # textx   saad #asadsas   ';
undefined
> txt.replace(/(^|\s|#)\s*/g, '$1')
'#text #textx saad #asadsas '
→ Ссылка