Вы можете использовать метод match
:
const a = 'info.name[0][1][5].data[0]';
const collect = a.match(/[^[]+?(?=\])/g) || [];
console.log(collect);
Регулярное выражение состоит из:
[1124 ][^[]+?
: захват одного или нескольких символов, которые не [
. ?
останавливает захват, как только будет выполнено следующее условие: (?=\])
: требуется, чтобы следующий символ был ]
, но не захватывайте его. Модификатор g
обеспечит возвращение всех совпадений.
|| []
добавляется для случая, когда вообще нет совпадений. В этом случае match
возвращает null
. Это дополнение выведет пустой массив вместо этого null
, что может быть более практичным.
Примечание: я не уверен, почему вы использовали reverse
, но если вам действительно нужен выходной массив в обратном порядке, вы, конечно, можете применить reverse
к нему.
Посмотрите интерфейс HandlerInterceptor вместо этого. Вы захотите afterCompletion метод. Можно затем прервать ответ и затем установить соответствующую информацию заголовка для перенаправления к настроенной контейнером ошибочной веб-странице. Вы правы, что Spring не имеет этой функциональности, это оказывается перед необходимостью быть указанным web.xml, который определяет, какие коды отображаются на который страницы.
Я не работал с этим конкретным битом пружинной платформы, но в документах говорится
"Интерфейс, который будет реализован объектами, чем, может разрешить исключения, выданные во время отображения обработчика или выполнения в типичном случае к ошибочным представлениям. Конструкторы обычно регистрируются как бобы в контексте приложения.
Ошибочные представления походят на ошибочную страницу JSPs, но могут использоваться с любым видом исключения включая любую контролируемую исключительную ситуацию с потенциально прекрасно-детализированными отображениями для определенных обработчиков."
таким образом, я предположил бы, что, учитывая, что NullPointer расширяет RuntimeException, платформа не разработана для ловли его. Существует ли причина, исключение не может быть обработано в контроллере непосредственно?