Регулярное выражение, возвращающее содержимое в нескольких квадратных скобках

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я использую регулярное выражение с JavaScript и хочу вернуть содержимое в квадратных скобках (включая сами скобки) в следующей строке:

 var str = '##abde[fgh]ijk[mn]op';
var brackets = str.match(/[.{1,}]/g); //["[fgh]ijk[mn]"]
 

Я хотел brackets вернуть ["[fgh]", "[mn]"] , а не содержимое (ijk) за скобками. Как это можно исправить? Спасибо.

Ответ №1:

Проблема здесь в том, что . соответствует любому символу (включая квадратные скобки).

Вы можете использовать класс символов, например:

 [^]]
 

для соответствия любому символу, кроме квадратных скобок.

Так что это должно сработать для вас:

 str.match(/[[^]]{1,}]/g);
 

Лучше было бы так:

 str.match(/[[^]] ]/g);
 

Это немного аккуратнее, поскольку {1,} семантически эквивалентно .