JavaScript

Не могу понять RegExp

Ну типа я читаю тошо написано на сайтах, но чота не могу догнать

Например у меня была задача текст типа: "textтекст1teeextтееекст2"
Отсортировать так что бы получилось 3 массива:
["text", "teeext"], ["текст", "тееекст"], [1,2]
Но из-за незнания регулярок я абасрался :)
let s = "textтекст1teeextтееекст2";

console.log( (s.match(/[a-z]+/gi) || []).sort((a, b) => a.length - b.length) );
console.log( (s.match(/[а-яё]+/gi) || []).sort((a, b) => a.length - b.length) );
console.log( (s.match(/\d+/gi) || []).sort((a, b) => a - b) );

флажок `g` — global (найти все совпадения, а не остановиться на первом)
флажок `i` — insensitive / ignorecase
`+` — одно или много совпадений подряд.
`\d` — digit, цифра.

|| [] — если match ничего не найдет, возвращается null. Тогда из-за логического || 'ИЛИ' возьмется второй пустой массив и не будет ошибки.
________________

const length_sort = (a, b) => a.length - b.length;

console.log( extract(s, /[a-z]+/gi, length_sort) );
console.log( extract(s, /[а-яё]+/gi, length_sort) );

function extract(str, regex, sorter = _ => 0) {
    return (str.match(regex) || []).sort(sorter);
}
Agajan Hudayberenow
Agajan Hudayberenow
62 360
Лучший ответ
Nicolai Grabovschi Думаю сортировка подразумевалась не в буквальном смысле, а как "РАССОРТИРОВАТЬ".
С этим можно справиться без регулярок. Но будет длинно и заумно.
Например попробуем из строки "textтекст1teeextтееекст2еще3текст" выудить русские слова и получить массив [ "текст", "тееекст", "еще", "текст" ]
>>>
let text = "textтекст1teeextтееекст2еще3текст";
let rus = [];
let rusWord = '';
for (var i = 0; i < text.length; i++) {
if (text[i].charCodeAt(0) > 1040 && text[i].charCodeAt(0) < 1103 ) {
rusWord += text[i]
}
else {
rusWord += ' '
}
};
rusWord = rusWord.trim();
rusWord = rusWord.split(' ');
console.log(rusWord);
for (var i = 0; i < rusWord.length; i++) {
if (rusWord[i] != '') {
rus.push(rusWord[i])
}
};
console.log(rus)
>>>
(4) […]

0: "текст"

1: "тееекст"

2: "еще"

3: "текст"

length: 4
Дмитрий Булат
Дмитрий Булат
97 277
Darhan Turlin 'ё'.charCodeAt(0); // 1105
Это делается одной строкой:

console.log(
Array.of(/[a-z]+/ig, /[a-яё]+/ig, /\d+/ig)
.map((re) => 'textтекст1teeextтееекст25'.match(re))
)
Agajan Hudayberenow Array.of(/[a-z]+/ig, /[a-яё]+/ig, /\d+/ig) вроде ничем не отличается от

Array(/[a-z]+/ig, /[a-яё]+/ig, /\d+/ig)
или
[/[a-z]+/ig, /[a-яё]+/ig, /\d+/ig]
Agajan Hudayberenow /[a-яё]+/ig — во второй регулярке, кстати, `a` латинский