Связанный .lib-файл связан с .dll
У меня была такая же проблема. Скажем, у меня есть проекты MyProject и TestProject. Я эффективно связал файл lib для MyProject с TestProject. Однако этот файл lib был создан, так как была построена DLL для MyProject. Кроме того, я не содержал исходный код для всех методов в MyProject, но только доступ к точкам входа DLL.
Чтобы решить проблему, я построил MyProject как LIB и связал TestProject с этим .lib-файлом (скопируйте вложенный файл .lib в папку TestProject). Затем я смогу снова создать MyProject как DLL. Он компилируется, поскольку lib, с которым связан TestProject, содержит код для всех методов в классах MyProject.
Это из-за скобки вокруг всего выражения: он определяет захваченную группу.
Если вы не используете флаг g
, match
возвращается в массив:
Здесь захваченная группа представляет собой целую строку.
То, что вам кажется, это
"$123 $149 $150".match(/\$\d+(\.\d{0,2})?/g)
, который возвращает
["$123", "$149", "$150"]
Первое - полное совпадение.
Вторая представляет собой внешнюю подгруппу, которую вы определили, которая совпадает с полным совпадением в вашем случае.
Эта конкретная подгруппа не имеет значения, t действительно кажется необходимым, поэтому вы должны уметь его удалить. Внутренняя группа не соответствует вашей конкретной строке.
FYI, если вы хотите использовать группу, но сделать ее не захватывающей, вы можете добавить ?:
в начало из этого.
var re = /(?:\$[0-9]+(\.[0-9]{2})?)/;
Опять же, группа здесь не делает вам много пользы, но она показывает использование ?:
.
Добавьте флаг g
в конец вашего регулярного выражения. В противном случае будет снято только первое совпадение. С g
подгруппы не записываются. Вы им не нужны; внешние скобки в вашем регулярном выражении фактически ничего не делают.
var re = /\$[0-9]+(\.[0-9]{2})?/g;
Вы можете явно запретить захват подгруппы с помощью (?:
, но это не имеет значения с флагом g
.