Skip to content

lei4519/convert-text-to-template

Repository files navigation

ConvertTextToTemplate README

通过正则匹配文本,并转换为模板(支持自定义正则和模板)。

Features

setup

默认的正则表达式

// 匹配 [数字 非中文 中文] 格式
/((?<value>\d+)[^\u4e00-\u9fa5]*?(?<label>[\u4e00-\u9fa5][^\d]*))/g

默认的转换模板

// 文字 1 状态

// 上面的文字会生成下面的代码

export const VAR = {
  var0: 1
}

export const VAR_TEXT = {
  [VAR.var0]: '状态'
}

自定义模板

这个插件只负责正则匹配和模板字符串的生成,所以你可以自定义配置任何类型、语言的模板。

注意 vscode 插件是 js 语言编写,所以正则和模板都是 js 语言的。

进入 vscode 配置项: ConvertTextToTemplate.Template,进行模板配置

此配置项是一个对象,对象的键中包含模板名称和正则表达式,对象值是模板字符串,下面一一细说

键由两部分组成:模板名称@正则表达式,由 @ 符号进行分割。

正则的编写

打开 chrome 控制台,找到 console 面板,在里面尝试编写你的正则表达式

可能你没有 js 语言的基础,所以对于上面的代码简单说一下

  • 第一行语句自然是创建一个正则表达式的实例,详见Regular
  • 第二行语句稍微复杂一点
    • '1 状态,2 状态,3 状态'.matchAll(r) 会把字符串中的所有匹配项找出来,并返回一个 Iterator
    • [...Iterator] 会把 Iterator 变为数组
    • .map(r => r.groups) 将数组中每一项的 groups 提取出来,映射为另一数组
    • 最后就是返回值所显示的部分,所有的匹配项数组 groups而这也正是模板中用到的 groups

一旦你编写测试好了正则表达式,就可以把对象的键构造出来了,比如模板名称叫 default,如下

{
  "default@((?<value>\\d+)[^\\u4e00-\\u9fa5]*?(?<label>[\\u4e00-\\u9fa5][^\\d]*))": ""
}

模板的编写

模板的解析使用了 underscore.template,所以你可以在里面使用相应的模板语法

打开上面的网址,同样进入控制台,输入下面的代码,生成的字符串就是将会插入到编辑器中的字符。

_.template(`export const \${1:VAR_NAME} = {
<% groups.forEach(({value}, i) => { %>
  \${<%= i + 2 %>:var<%= i %>}: <%= value %>,
<% }); %>
}

export const $1_TEXT = {
<% groups.forEach(({label}, i) => { %>
  [$1.$<%= i + 2 %>]: <%= label %>,
<% }); %>
}`)({groups: [{label: "状态", value: 1}] })

字符会以 vscode snippet 的形式插入到编辑器中,所以你可以写合法的 snippet 片段。

一旦你写好了模板,就可以将其放入值的部分,以下就是默认模板的配置。

{
  "default@((?<value>\\d+)[^\\u4e00-\\u9fa5]*?(?<label>[\\u4e00-\\u9fa5][^\\d]*))": "export const ${1:VAR_NAME} = {\n<% groups.forEach(({value}, i) => { %>\t${<%= i + 2 %>:var<%= i %>}: <%= value %>,\n<% }); %>}\n\nexport const $1_TEXT = {\n<% groups.forEach(({label}, i) => { %>\t[$1.$<%= i + 2 %>]: \"<%= label.trim() %>\",\n<% }); %>}"
}

Extension Settings

This extension contributes the following settings:

  • ConvertTextToTemplate.Template: 自定义匹配文本的转换方式

About

vscode 插件,转换文字为指定模板

Resources

License

Stars

Watchers

Forks