Подберите и запишите (заглавные) буквы в квадратных скобках
Я довольно новичок в регулярных выражениях, и я хотел бы знать шаблон, который соответствует и фиксирует буквы в квадратных скобках. Например, я хотел бы захватить данные из строки ниже. Мой пример кода, как показано ниже:
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 ответа
В зависимости от того, насколько похожи тестируемые строки и насколько строгим является ваше регулярное выражение, у вас есть несколько вариантов от менее строгого до более строгого:
Просто сопоставьте что-то в квадратных скобках:
\[(.+)\]
В этом случае вы, вероятно, захотите не жадное регулярное выражение. Потому что, если в скобках было две разные вещи, например
[AB] some text [CD]
это захватило быAB] some text [CD
, Нежадный флаг предотвратит это.сопоставьте квадратные скобки после закрывающей скобки и пробела:
\)\s\[(.+)\]
сопоставьте квадратные скобки ровно после 3 слов:
(?:[^\s]+\s){3}\[(.+)\]
Вы все еще можете стать более строгими в зависимости от ваших потребностей, но вы поймете, в чем суть.
Более строгое регулярное выражение предотвратит случайное совпадение с тем, чего вы не ожидали. Например, если test_module
был бы [test_module]
первое регулярное выражение соответствовало бы этому, два других - нет.
Это особенно важно, когда строка полностью или даже частично состоит из пользовательского ввода. Никогда не доверяй пользователю;)
Попробуйте использовать:
\[([A-Z]+)\]
Захватывать скобки только заглавными буквами.
Два соответствия двух или более строк в скобках, используйте /g
для глобального отбора.
"Наилучшим", на мой взгляд, было бы смотреть в прошлое и смотреть в будущее.
(?<=\[)[A-Z]+?(?=\])
Это также позволит избежать выбора скобок
Или возможно:
\[([A-Z]+?)\]
в более ограниченном аромате