Skip to content

parse

概述

parse 函数用于解析符合 Java Properties 格式的文本内容,支持自定义分隔符、注释前缀和回调函数,实现键值对与注释的分离处理。


接口定义

ParseOptions

typescript
export interface ParseOptions {
  separators?: string[]; // 键值分隔符,默认 `['=', ':']`
  commentPrefixes?: string[]; // 注释前缀,默认 `['#', '!']`
  onData?: (key: string, value: string, lineno: number) => void; // 键值对回调
  onComment?: (comment: string, lineno: number) => void; // 注释回调
}

函数定义

typescript
export function parse(
  input: string,
  options: ParseOptions = {}
): void

参数说明

参数名类型默认值说明
inputstring-需要解析的配置内容
optionsParseOptions{}解析配置选项

选项参数

参数名默认值说明
separators['=', ':']支持的键值分隔符(如 key=valuekey: value
commentPrefixes['#', '!']注释行起始符号(如 # comment! note
onDatanoop处理键值对的回调函数(参数:键、值、行号)
onCommentnoop处理注释的回调函数(参数:注释内容、行号)

功能描述

解析流程

  1. 逐字符解析:按行解析输入内容,逐字符处理:

    • 注释行:以 commentPrefixes 开头的行触发 onComment
    • 键值对:通过 separators 分割键值,处理转义字符(如 \= 表示字面量分隔符)。
    • Unicode 转义:支持 \uxxxx 格式(如 \u0041A)。
  2. 特殊字符处理

    • 转义符 (\):可转义分隔符(如 key\=value 表示键为 key=)。
    • 空白字符WHITE_SPACE(空格、制表符、换页符)默认忽略。
    • 换行符\r\n 标识换行,自动处理 \r\n 组合。

异常处理

  • 多分隔符错误:同一行出现多个分隔符时抛出 Error
  • Unicode 解码错误:无效的 \uxxxx 编码时抛出 TypeError

使用示例

typescript
parse('key=value\n# comment', {
  onData(key, value, lineno) {
    console.log(`Line ${lineno}: ${key} = ${value}`);
  },
  onComment(comment, lineno) {
    console.log(`Line ${lineno}: COMMENT: ${comment}`);
  }
});
// 输出:
// Line 1: key = value
// Line 2: COMMENT: # comment

注意事项

  1. 转义规则
    • \ 可转义分隔符(如 key\=value 表示键为 key=)。
    • \n, \t 等转义字符会被自动解码。
  2. Unicode 支持
    • \uxxxx 格式的 Unicode 编码会被转换为对应字符(如 \u0041A)。
  3. 空行处理
    • 空行会被忽略,不会触发 onDataonComment

异常场景

错误类型触发条件
Error同一行出现多个分隔符(如 key:=value
TypeError\uxxxx 编码格式错误(如 \u1\uG123

返回值

  • 无返回值void),通过回调函数传递解析结果。