parseQuantity
Parses a quantity string into its numeric value
525 bytes
since v12.6.0
Usage
Parse a quantity string like "2 dollars"
into its numeric value. You must provide a
unit conversion map, with optional short unit aliases.
import * as _ from 'radashi'
const moneyUnits = { units: { cent: 1, dollar: 100, }, short: { $: 'dollar', },} as const
_.parseQuantity('1 cent', moneyUnits)// => 1
_.parseQuantity('2 dollars', moneyUnits)// => 200
_.parseQuantity('5$', moneyUnits)// => 500
You may use the QuantityParser
class instead, which is more efficient for repeated parsing.
const moneyParser = new _.QuantityParser(moneyUnits)
If you specifically need to parse a duration (e.g. “1 hour”, “2 seconds”) into milliseconds,
you can use the parseDuration
function instead.
Subclassing
You can subclass QuantityParser
to create a parser for a specific unit.
import { QuantityParser, type QuantityString } from 'radashi'
export type DistanceUnit = keyof typeof DistanceParser.unitsexport type DistanceShortUnit = keyof typeof DistanceParser.shortUnits
export type DistanceString = QuantityString<DistanceUnit, DistanceShortUnit>
export class DistanceParser extends QuantityParser<DistanceUnit, DistanceShortUnit> { constructor() { super({ units: DistanceParser.units, short: DistanceParser.shortUnits, }) }
static units = { kilometer: 1_000, mile: 1_852, yard: 0.9144, foot: 0.3048, meter: 1, } as const
static shortUnits = { km: 'kilometer', mi: 'mile', yd: 'yard', ft: 'foot', m: 'meter', } as const})
// Usageconst distanceParser = new DistanceParser()
distanceParser.parse('1 kilometer') // => 1_000distanceParser.parse('1km') // => 1_000distanceParser.parse('1 mile') // => 1_852distanceParser.parse('1mi') // => 1_852distanceParser.parse('1 yard') // => 0.9144distanceParser.parse('1yd') // => 0.9144distanceParser.parse('1 foot') // => 0.3048distanceParser.parse('1ft') // => 0.3048distanceParser.parse('1 meter') // => 1
You may want to create a wrapper function to make it easier to use.
import { DistanceParser, type DistanceString } from './DistanceParser'
const parser = new DistanceParser()
export function parseDistance(input: DistanceString): number { return parser.parse(input)}
// UsageparseDistance('1 kilometer') // => 1_000parseDistance('1km') // => 1_000parseDistance('1 mile') // => 1_852