Помогите написать регулярку - только буквы и пробел, но чтобы строка не начиналась с пробела

Рейтинг: 0Ответов: 3Опубликовано: 11.01.2023

Нужно чтобы строка состояла только из букв и пробелов. Но чтобы не начиналась на пробел. Помогите, пожалуйста написать такую регулярку. Вот у меня есть рабочий вариант с символами

let value = ' Hello, world! 1345 '
value = value.replace(/[^A-zА-я\s]/g, '')
console.log(value)

Помогите пожалуйта дописать ее так, чтобы первым символом не мог быть пробел? Пробовал разные варианты, даже ужасного рабочего не получилось. Тиипа

/[^A-zА-я]{1}[^A-zА-я\s]$/g
/[^A-zА-я]{0,1}[^A-zА-я\s]$/g
/[\s+]{1}[^A-zА-я\s]$/g

И подскажите, пожалуйста, вроде был способ обознать все символы из любого языка? Чтобы не перечислять А-я

Ответы

▲ 2Принят

Используйте

text.replace(/^\s+|[^A-ZА-ЯЁ\s]/gi, '')

Подробности

  • ^ - начало строки
  • \s+ - один и более пробельных символов
  • | - или
  • [^A-ZА-ЯЁ\s] - любой символ, отличный от русских кириллических и латинских букв и пробельных символов.
▲ 1

Метасимвол \p{L} совпадает с любой буквой любого языка если регулярное выражение работает с Unicode (флаг u).

Это выражение требует чтобы первый символ был буквой, затем идёт любое число букв и пробельных символов:

//           буква            Unicode
//           -----            -
const re = /^\p{L}[\s\p{L}]*$/u;
//                ----------
//                пробелы или буквы

console.log(re.test(' Hello'));
console.log(re.test('Hello, world!'));
console.log(re.test('Hello world '));
console.log(re.test(' Привет'));
console.log(re.test('Привет, мир!'));
console.log(re.test('Привет мир '));

▲ 1

Суть выражения /^(?:[^a-zA-Z]|\s)+|[^a-zA-Z\s]/g:

  • один или более недопустимых символов или пробелов с начала строки ^(?:[^a-zA-Z]|\s)+
  • или |
  • не-буква и не-пробел в любом месте строки [^a-zA-Z\s]

заменяются на пусто

[' Hello, world! 1345 ', '123456 aaa', '     BBB 145CCC__=+*/UUU'].forEach(value => {
  console.log(value.replace(/^(?:[^a-zA-Z]|\s)+|[^a-zA-Z\s]/g, ''))
})