С вашим шаблоном происходит несколько вещей, но я думаю, что только одно приводит к сбою сопоставления:
- Ваши скобки немного смещены.
- У вас есть
+
после подчеркивания, но я не думаю, что вы хотите / нуждаетесь в этом. - У вас есть лишние пробелы в начале шаблона.
Из них, вероятно,единственная проблема, мешающая вам получить совпадение - последняя.Остальная часть шаблона все равно должна совпадать, хотя, вероятно, не совсем так, как вы этого хотите (то есть она будет соответствовать некоторым вещам, которые вы бы не хотели, чтобы она соответствовала).Я бы пошел с этим:
/\d+(_\d+)+/
Если вы хотите принять шаблон без подчеркивания (например, 999999), используйте это:
/\d+(_\d+)*/
О вашем втором вопросе: Причина, по которой он соответствует / \**|TYPE:|\=*/
, заключается в том, что \**
и \=*
используют *
в качестве квантификатора, а не +
.Это означает, что они будут совпадать, даже если ввод не содержит символов *
или =
.\=*
соответствует пустой строке, поэтому это выражение будет соответствовать любому вводу. Измените его на / \*+|TYPE:|\=+/
, и оно больше не должно совпадать.