Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 24x 15x 15x 15x | import { dataUrlRegExpBuilder } from '../regexp' import { LiteralUnion } from '../types' import { parseUrlQueryString } from './parseUrlQueryString' const regExp = dataUrlRegExpBuilder.build({ exact: true, }) export interface ParseDataUrlResult { mimeType: string parameters: Record< LiteralUnion<'name' | 'charset' | 'base64', string>, string > content: string base64: boolean } /** * 解析 Data URL。 * * @param dataUrl 要解析的 Data URL * @returns 返回结果 */ export function parseDataUrl(dataUrl: string): ParseDataUrlResult { const [ , mimeType = 'text/plain;charset=US-ASCII', , , extraParameters = '', content = '', ] = dataUrl.match(regExp) || [] const parameters = parseUrlQueryString( `${mimeType}${extraParameters}`.replace(/^[^;]*;?/, ''), { partSeparator: ';', }, ) return { mimeType: decodeURIComponent(mimeType), parameters: parameters, content: decodeURIComponent(content), base64: parameters.base64 != null, } } |