Подберите и запишите (заглавные) буквы в квадратных скобках

Я довольно новичок в регулярных выражениях, и я хотел бы знать шаблон, который соответствует и фиксирует буквы в квадратных скобках. Например, я хотел бы захватить данные из строки ниже. Мой пример кода, как показано ниже:

var myString = "testing/node/234 test_TEST [1234] testing [DATA] SUMMARY,VALUES,abcd,1,0,0";
var re = new RegExp("\[([A-Z]+)\]");
var match = re.exec(myString);
console.log(match[1]);

Это дает мне синтаксическую ошибку: * Unmatched ')' * во второй строке.

3 ответа

Решение

В зависимости от того, насколько похожи тестируемые строки и насколько строгим является ваше регулярное выражение, у вас есть несколько вариантов от менее строгого до более строгого:

  1. Просто сопоставьте что-то в квадратных скобках:

    \[(.+)\]
    

    В этом случае вы, вероятно, захотите не жадное регулярное выражение. Потому что, если в скобках было две разные вещи, например [AB] some text [CD] это захватило бы AB] some text [CD, Нежадный флаг предотвратит это.

  2. сопоставьте квадратные скобки после закрывающей скобки и пробела:

    \)\s\[(.+)\]
    
  3. сопоставьте квадратные скобки ровно после 3 слов:

    (?:[^\s]+\s){3}\[(.+)\]
    

Вы все еще можете стать более строгими в зависимости от ваших потребностей, но вы поймете, в чем суть.

Более строгое регулярное выражение предотвратит случайное совпадение с тем, чего вы не ожидали. Например, если test_module был бы [test_module] первое регулярное выражение соответствовало бы этому, два других - нет.

Это особенно важно, когда строка полностью или даже частично состоит из пользовательского ввода. Никогда не доверяй пользователю;)

Попробуйте использовать:

\[([A-Z]+)\]

Захватывать скобки только заглавными буквами.

Два соответствия двух или более строк в скобках, используйте /g для глобального отбора.

"Наилучшим", на мой взгляд, было бы смотреть в прошлое и смотреть в будущее.

(?<=\[)[A-Z]+?(?=\])

Это также позволит избежать выбора скобок

Или возможно:

\[([A-Z]+?)\]

в более ограниченном аромате

Другие вопросы по тегам