Я хочу сопоставить часть строки, используя регулярное выражение , а затем получить доступ к подстроке в скобках:
var myString = "something format_abc"; // I want "abc"
var arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString);
console.log(arr); // Prints: [" format_abc", "abc"] .. so far so good.
console.log(arr[1]); // Prints: undefined (???)
console.log(arr[0]); // Prints: format_undefined (!!!)
Что я делаю не так?
Я обнаружил, что в приведенном выше коде регулярного выражения нет ничего неправильного: фактическая строка, с которой я проверял, была такой:
"date format_%A"
Сообщение о том, что «% A» не определено, кажется очень странным поведением, но оно не имеет прямого отношения к этому вопросу, поэтому я открыл новый, Почему совпадающая подстрока возвращает «undefined» "в JavaScript? .
Проблема заключалась в том, что console.log
принимает свои параметры как оператор printf
, и поскольку строка, которую я записывал ("%A"
), имела специальное значение, она пыталась найти значение следующего параметра.