/^(\w+?)_?(\d{0,2})(?:\[([^\[\]]*)\])?$/
(\w+?)
использует non-greedy quantifier, чтобы захватить часть идентификатора без каких-либо задней _
.
_?
жадный так будет бить +?
в предыдущей части.
(\d{0,2})
будет захватывать 0-2 цифры. Он жадный, поэтому даже если между идентификатором и цифрами нет _
, это будет записывать цифры.
(?:...)?
делает квадратную секцию в квадратных скобках опциональной.
\[([^\[\]]*)\]
захватывает содержимое квадратного квадратного скобки, которое не содержит квадратные скобки.
'some_param_0[name]'.match(/^(\w+?)_(\d{0,2})(?:\[([^\[\]]*)\])?$/)
производит массив, как:
["some_param_0[name]", // The matched content in group 0.
"some_param", // The portion before the digits in group 1.
"0", // The digits in group 2.
"name"] // The contents of the [...] in group 3.
Обратите внимание, что не жадный квантор может взаимодействовать странно с ограниченным повторением в \d{0,2}
.
'x1234[y]'.match(/^(\w+?)_?(\d{0,2})(?:\[([^\[\]]*)\])?$/)
дает
["x1234[y]","x12","34","y"]
Я думаю, он хочет удалить задние подчеркивания .. Я прав? Я пробовал использовать '/^([a-zA-Z _] +) (?: _ (\ D {0,2}))? (?: \ [([^ \ [\]] *) \])? $/', но похоже, что он не работает (по крайней мере, в Python) – redShadow
@redShadow, RegExp в OP оставляет его из группы захвата 1, поэтому я предположил, что плакат захотел его. –
Извините, в code comment Я упомянул, что я идеально хотел, чтобы нижнее подчеркивание было проигнорировано («some_param» вместо «some_param_»). Должно было быть ясно в вопросе. – fenderplayer