Помогите написать регулярку - только буквы и пробел, но чтобы строка не начиналась с пробела
Нужно чтобы строка состояла только из букв и пробелов. Но чтобы не начиналась на пробел. Помогите, пожалуйста написать такую регулярку. Вот у меня есть рабочий вариант с символами
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
И подскажите, пожалуйста, вроде был способ обознать все символы из любого языка? Чтобы не перечислять А-я
Ответы (3 шт):
Метасимвол \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('Привет мир '));
Суть выражения /^(?:[^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, ''))
})
Используйте
text.replace(/^\s+|[^A-ZА-ЯЁ\s]/gi, '')
Подробности
^- начало строки\s+- один и более пробельных символов|- или[^A-ZА-ЯЁ\s]- любой символ, отличный от русских кириллических и латинских букв и пробельных символов.