Я хочу сопоставить часть строки, используя регулярное выражение, а затем получить доступ к этой подстроке в скобках:
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 кажется очень странным поведением, но оно напрямую не связано с этим вопросом, поэтому я открыл новый, Почему совпадающая подстрока, возвращающая "undefined" в JavaScript?.
Проблема заключалась в том, что console.log
принимает свои параметры как оператор printf
, а поскольку строка, которую я записывал ("%A"
), имела специальное значение, она пыталась найти значение следующего параметра.