Skip to content

extractNumbers function ​

Extracts every number of a text, with the rules of extractNumber.

ts
import { extractNumbers } from 'utils';

Signature ​

ts
export function extractNumbers(input: string): number[]

Parameters ​

NameDescription
inputA text.

Returns ​

The numbers found, in order; empty when there is none.

Example ​

ts
extractNumbers('from 1.5 to -3'); // [1.5, -3]

Tests ​

Line coverage: 100 %.

  • ✅ extracts every number
  • ✅ can be called repeatedly (no shared regex state)

Source ​

src/string/extract-numbers.ts (on GitHub)

Files it needs ​

src/string/extract-numbers.ts imports, directly or not:

Source code
ts
import { parseMatchedNumber } from './internal';

const NUMBER_SOURCE = String.raw`[+\-]?(?:\d+(?:[,.]\d+)?|[,.]\d+)`;

const NUMBERS_PATTERN = new RegExp(NUMBER_SOURCE, 'gv');

/**
 * Extracts every number of a text, with the rules of `extractNumber`.
 *
 * @param input - A text.
 * @returns The numbers found, in order; empty when there is none.
 * @example
 * extractNumbers('from 1.5 to -3'); // [1.5, -3]
 */
export function extractNumbers(input: string): number[] {
  return Array.from(input.matchAll(NUMBERS_PATTERN), (match) => parseMatchedNumber(match[0]));
}
Test file
ts
import { extractNumbers } from './extract-numbers';

describe(extractNumbers, () => {
  it('extracts every number', () => {
    expect(extractNumbers('from 1.5 to -3, then +2,25')).toStrictEqual([1.5, -3, 2.25]);
    expect(extractNumbers('none')).toStrictEqual([]);
  });

  it('can be called repeatedly (no shared regex state)', () => {
    expect(extractNumbers('1 2')).toStrictEqual([1, 2]);
    expect(extractNumbers('1 2')).toStrictEqual([1, 2]);
  });
});

Keywords: extract, numbers, strings, function

Generated from the JSDoc of the sources.