Skip to content

extractNumber

Extracts the first number embedded anywhere in a string, or passes through a number.

Unlike a plain parseFloat/parseInt, the number does not need to be at the start of the string: digits are searched for anywhere, so leading/trailing text (units, labels, …) is ignored. A - before the digits and a scientific-notation suffix (e/E) are disambiguated with ExtractNumberOptions.sign and ExtractNumberOptions.exponent.

Returns undefined if no number can be found.

Available since v2.0.4

import { extractNumber } from '@helpers4/number';
// or, from the all-in-one package (same code, one install):
import { extractNumber } from 'helpers4/number';
extractNumber(value: unknown, options: ExtractNumberOptions): number | undefined
ParameterTypeDescription
valueunknownThe value to extract a number from
optionsExtractNumberOptionsOptions controlling sign and exponent disambiguation

number | undefined — The extracted number, or undefined if none was found

extractNumber('16.5px')        // => 16.5
extractNumber('.5rem')         // => 0.5   (leading-dot decimal)
extractNumber('-.5')           // => -0.5  (leading-dot with sign)
extractNumber('Wafer 10')      // => 10
extractNumber('xxx-111')       // => 111   ('-' glued to text → separator)
extractNumber('xxx -111')      // => -111  ('-' preceded by a space → sign)
extractNumber('x-.5')          // => 0.5   ('-' glued to 'x' → separator; leading-dot decimal follows)
extractNumber('-111')          // => -111  ('-' at the start of the string → sign)
extractNumber('1e5 mol')       // => 100000
extractNumber('1e5kg')         // => 1     ('e5' glued to text → mantissa only)
extractNumber('no number')     // => undefined
extractNumber(42)              // => 42

Options for extractNumber.

interface ExtractNumberOptions {
  exponent?: "auto" | "strict" | "ignore";
  sign?: "auto" | "strict" | "ignore";
}

View source on GitHub