Глобальный флаг возвращает один результат, а флаг не возвращает несколько (JS Regex HELP) [дубликат]

Связанный .lib-файл связан с .dll

У меня была такая же проблема. Скажем, у меня есть проекты MyProject и TestProject. Я эффективно связал файл lib для MyProject с TestProject. Однако этот файл lib был создан, так как была построена DLL для MyProject. Кроме того, я не содержал исходный код для всех методов в MyProject, но только доступ к точкам входа DLL.

Чтобы решить проблему, я построил MyProject как LIB и связал TestProject с этим .lib-файлом (скопируйте вложенный файл .lib в папку TestProject). Затем я смогу снова создать MyProject как DLL. Он компилируется, поскольку lib, с которым связан TestProject, содержит код для всех методов в классах MyProject.

4
задан Hommer Smith 29 October 2013 в 19:15
поделиться

3 ответа

Это из-за скобки вокруг всего выражения: он определяет захваченную группу.

Если вы не используете флаг g, match возвращается в массив:

  • вся строка, если она соответствует шаблону
  • захваченная группа (группы)

Здесь захваченная группа представляет собой целую строку.

То, что вам кажется, это

"$123 $149 $150".match(/\$\d+(\.\d{0,2})?/g)

, который возвращает

["$123", "$149", "$150"]

Ссылка: MDN о регулярных выражениях и флагах

6
ответ дан Denys Séguret 31 August 2018 в 16:32
поделиться

Первое - полное совпадение.

Вторая представляет собой внешнюю подгруппу, которую вы определили, которая совпадает с полным совпадением в вашем случае.

Эта конкретная подгруппа не имеет значения, t действительно кажется необходимым, поэтому вы должны уметь его удалить. Внутренняя группа не соответствует вашей конкретной строке.


FYI, если вы хотите использовать группу, но сделать ее не захватывающей, вы можете добавить ?: в начало из этого.

var re = /(?:\$[0-9]+(\.[0-9]{2})?)/;

Опять же, группа здесь не делает вам много пользы, но она показывает использование ?:.

6
ответ дан Blue Skies 31 August 2018 в 16:32
поделиться

Добавьте флаг g в конец вашего регулярного выражения. В противном случае будет снято только первое совпадение. С g подгруппы не записываются. Вы им не нужны; внешние скобки в вашем регулярном выражении фактически ничего не делают.

var re = /\$[0-9]+(\.[0-9]{2})?/g;

Вы можете явно запретить захват подгруппы с помощью (?:, но это не имеет значения с флагом g.

2
ответ дан Explosion Pills 31 August 2018 в 16:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: