Во-первых, [A-z]
не так.В дополнение к буквам, он будет соответствовать квадратной скобке, обратной косой черте, каретке, подчеркиванию или обратному символу - всем символам, которые лежат между прописными и строчными буквами в наборе символов ASCII.Вы должны использовать либо [A-Za-z]
, либо [A-Z]
с учетом регистра без учета регистра.
Чтобы сопоставить один или несколько серийных номеров, выполните следующие действия:
/\d{5}(?:\s*-\s*\d{5})?/
... и для номеров деталей:
/([A-Z]{2})\d{3}(?:\s*-\s*\1\d{3})?/i
В своем регулярном выражении вы использовали \4
, но это было неправильно.Возможно, это была четвертая группа , которая соответствовала буквам в первом номере детали, но это была только первая группа , которая должна была использовать \1
.
Соединяя это вместе, чтобы соответствовать целой серии, у вас есть
/(?:\b(?:\d{5}(?:\s*-\s*\d{5})?|([A-Z]{2})\d{3}(?:\s*-\s*\1\d{3})?)(?:,\s*)?)+/i
Запятая должна быть необязательной, но это означает, что регулярное выражение может неправильно соответствовать последовательности, такой как 1234512345
или 12345ab123
.Вряд ли это произойдет, я добавил слово border (\b
), чтобы покрыть его.Между двумя серийными / серийными номерами / диапазонами должен быть хотя бы один несловичный символ, а (?:,\s*)?
означает, что это может быть только запятая и необязательный пробел.Ваш [, ]*
позволит использовать любое количество пробелов и / или запятых или вообще ничего.