parseQuantity
将数量字符串解析为其数值
525 bytes
since v12.6.0
使用方法
将数量字符串如 "2 dollars" 解析为其数值。您必须提供单位转换映射,可选择提供短单位别名。
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您可以改用 QuantityParser 类,它对于重复解析更高效。
const moneyParser = new _.QuantityParser(moneyUnits);如果您特别需要将持续时间(如”1 hour”,“2 seconds”)解析为毫秒,可以改用 parseDuration 函数。
子类化
您可以子类化 QuantityParser 来为特定单位创建解析器。
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})
// 使用方法const 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您可能想要创建一个包装函数以便更容易使用。
import { DistanceParser, type DistanceString } from "./DistanceParser";
const parser = new DistanceParser();
export function parseDistance(input: DistanceString): number { return parser.parse(input);}
// 使用方法parseDistance("1 kilometer"); // => 1_000parseDistance("1km"); // => 1_000parseDistance("1 mile"); // => 1_852