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
| Name | Description |
|---|---|
input | A 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