В 150,000.00
при использовании шаблона (\d*\.?\d+|\d{1,3}(,\d{3})*(\.\d+)?)
он не будет соответствовать запятой, потому что 150 будет соответствовать \d*\.?\d+
, и ни одна из альтернатив не начинается с запятой.
Это возможно, потому что \d*
означает 0+ цифр, так что будет соответствовать 150. Тогда \.?
является необязательной точкой, поэтому она продолжается до \d+
.
Из-за отслеживания пути \d*
может отказаться от одного совпадения, чтобы соответствовать хотя бы 1 цифре из \d+
, и 150 останется в матче.
Тогда следующий символ - ,
, но чередование не начинается с запятой, поэтому следующий символ пробуется, и на этот раз этот шаблон \d*\.?\d+
может соответствовать 000.00
.
Один вариант, который соответствует вашему значению (и если вы хотите только совпадение, вы можете опустить группы захвата), вы удалите эту часть \d*\.?\d+
(?:[£€$¥£]|USD|US\$)\s?\d{1,3}(?:,\d{3})*(?:\.\d+)?
Regex demo