Помогите написать регулярное выражение
Помогите пожалуйста написать регулярное выражение.
Из строки доставать:
45 - чиста;
45а - числа с буквой;
45/2 - дробные числа;
45+ - числа с плюсиком;
45- - числа с минусом;
45-50 - числа через тире;
45 кодовая фраза - числа с кодовой фразой.
То есть, строка:
65 бла 65/2 бла бла 65а 65+ 65- ччч..чч 65-70 65 кодовая фраза"
после преобразования str.match(/re/g) должна превратиться в массив:
["65", "65/2", "65а", "65+", "65-", "65-70", "65 кодовая фраза"]
Все до чего пока дошел: /[0-9]+[\[\w\]]?/g, достает числа и числа с буквой.
Но когда начинаю пытаться вставить вложенные квадратные скобочки, получаю ошибку синтаксиса.
Никак не пойму принципа.
Ответы (4 шт):
Для фразы с мусором между искомыми значениями.
- Выделяем число длиной 1 цифра и больше (квантификатор "x+")
- Выделяем один символ, который может быть:
/-+или символом алфавита (кириллица, латинский), добавляем условия, что символ не обязателен (квантификатор "x?") - Выделяем число длиной 1 цифра и больше с условием необязательности.
- Или выделяем
кодовая фраза, добавляем условие необязательности. - Указываем параметры
igm- регистронезависимость, глобальный поиск и мультистроковость - Везде используем незахватывающие скобки (?:x)
Ниже три варианта:
1. Если пробел является обязательным признаком-разделителем.
const str = `65 бла 65/2 бла бла 65а 33 кодовая
фраза
65+ 65- ччч..чч 65-70 65 кодовая фраза
77_ 123_99 43 _ кодовая
фраза $$$ 55&&45$$ #85* 77 \"кодовая фраза\" 22-33 кодовая фраза
100500 \кодовая фраза\ `;
const res = str.match(/(?:^|(?<=\s))(?:\d+(?:[\/\-\+\a-zа-яё]?(?:\d+)?|\s+кодовая\s+фраза)?)(?=\s|$)/igm);
console.log(res);
2. Если пробел не является обязательным признаком-разделителем.
const str = `65 бла 65/2 бла бла 65а 33 кодовая
фраза
65+ 65- ччч..чч 65-70 65 кодовая фраза
77_ 123_99 43 _ кодовая
фраза $$$ 55&&45$$ #85* 77 \"кодовая фраза\" 22-33 кодовая фраза
100500 \кодовая фраза\ `;
const res = str.match(/\d+(?:[\/\-\+\a-zа-яё]?(?:\d+)?|\s+кодовая\s+фраза)?/igm);
console.log(res);
3. Если нет мусора.
Можно разбить по пробелам c использованием квантификатора x(?=y)
const str = "65 65/2 65а 65+ 65- 65-70 65 кодовая фраза";
const res = str.split(/\s(?=[^a-zа-яё])/ig);
console.log(res);
var s = `Помогите пожалуйста написать регулярное выражение.
Из строки доставать:
45 - чиста;
45а - числа с буквой;
45/2 - дробные числа;
45+ - числа с плюсиком;
45- - числа с минусом;
45-50 - числа через тире;
45 кодовая фраза - числа с кодовой фразой.
т.е. строка "65 бла 65/2 бла бла 65а 65+ 65- ччч..чч 65-70 65 кодовая фраза"
после преобразования str.match(/re/g) должна превратиться в массив
["65", "65/2", "65а", "65+", "65-", "65-70", "65 кодовая фраза"]
все до чего пока дошел - /[0-9]+[[\w]]?/g
достает числа и числа с буквой.
но когда начинаю пытаться вставить вложенные квадратные скобочки, получаю ошибку синтаксиса.
никак не пойму принципа.`
console.log(s.match(/\d+([a-zа-яёA-ZА-ЯЁ](?![a-zа-яёA-ZА-ЯЁ\d])|-\d+|[-+]|\/\d+|\s+кодовая фраза)?/g))
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
const regex = /\b\d+(?:\S+|\sкодовая фраза)?/gm;
const str = `45 - чиста;
45а - числа с буквой;
45/2 - дробные числа;
45+ - числа с плюсиком;
45- - числа с минусом;
45-50 - числа через тире;
45 кодовая фраза - числа с кодовой фразой.
21
3123/422fddf кодовая фраза
22 кодовая фраза
`;
console.log(str.match(regex));
\b\d+(?:\S+|\sкодовая фраза)?
\b - граница слова
\d+ - одна и более цифр
(?: - начало не захватываемой группы
\S+ - один и более не пробельных символов, эквивалент [^\r\n\t\f\v ]
| - в группе означает или
\sкодовая фраза) - пробельный символ и кодовая фраза
Вот так вот (используются маленькие буквы на английском и русском (удалите английские, если не нужны; добавьте флаг i, если большие также нужны), используются именно пробелы, а не любые пробельные символы \s):
(?:\d+[a-zа-яё+-]|\d+[/—]\d+|\d+ кодовая фраза|\d+)
45 - чиста;
45а - числа с буквой;
45/2 - дробные числа;
45+ - числа с плюсиком;
45- - числа с минусом;
45—50 - числа через тире;
45 кодовая фраза - числа с кодовой фразой.
65 бла 65/2 бла бла 65а 65+ 65- ччч..чч 65—70 65 кодовая фраза"