Как написать регулярное выражение без negative lookahead?

Необходимо детектировать следующие модели: ShowMaker, Chapionships, Markerwons, Lee-Broks и All-Mars
Номер указывается в виде 4-ех цифр Размеры кроссовок представлены в виде Русских и Английских размеров: (35-45)
RU и (5 до 11.5) UK. Стоит учитывать промежуточные размеры, например 36.5. Стоить учесть, что модель, серия и номер должны быть отделены пробелом или табуляцией
Например: Chapionships 3285 7.5 UK или Lee-Broks 6832 39 RU

Я написал примерное понимание как должно быть, но резделить с точкой не смог по типу 39.3
(ShowMaker|Chapionships|Markerwons|Lee-Broks|All-Mars)\s\d{0,4}\s(3([5-9]\d?)?|4([0-5]\d?)?).[0-9]\s(RU)

Думаю для англ версии 2 делается также просто

60e2a182836c7723587727.png
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
/(ShowMaker|Chapionships|Markerwons|Lee-Broks|All-Mars)\s(\d{4})\s((((([5-9]|10)(\.\d)?)|(11(\.[0-5])?))\sUK)|(((3[5-9]|4[0-4])(\.\d)?|45)\sRU))/

Тест

(() => {
	const expression = /(ShowMaker|Chapionships|Markerwons|Lee-Broks|All-Mars)\s(\d{4})\s((((([5-9]|10)(\.\d)?)|(11(\.[0-5])?))\sUK)|(((3[5-9]|4[0-4])(\.\d)?|45)\sRU))/;

	const brands = ['ShowMaker', 'Chapionships', 'Markerwons', 'Lee-Broks', 'All-Mars'];

	const round = (number) => Math.round(number * 10) / 10;

	for (const brand of brands) {
		console.group(brand);
		console.group('UK');
		console.time();
		for (let size = 5; size <= 11.5; size += 0.1) {
			const variant = `${brand} 0000 ${round(size)} UK`;
			console.assert(expression.test(variant), variant);
		}
		console.timeEnd();
		console.groupEnd();

		console.group('RU');
		console.time();
		for (let size = 35; size <= 45; size += 0.1) {
			const variant = `${brand} 0000 ${round(size)} RU`;
			console.assert(expression.test(variant), variant);
		}
		console.timeEnd();
		console.groupEnd();
		console.groupEnd();
	}
})();

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
hahenty
@hahenty
('•')
Шаблоны внутри вариативной группы ( | ) не требуют вопроса позади себя.
Цифра с вопросом после [5-9] и [0-5] не нужна же?
45.9 пройдёт в шаблон.
Для британской метрики расписать отдельно, подобно имеющемуся русскому шаблону, и включить шаблоны метрик через (|).
Саму британскую метрику через варианты с перебором ([5-9]|10|11), десятые доли и так далее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы