俊泽生成器Web应用程序 - 帮助概述模板列表变量的定义与引用直接赋值模式模板赋值模式变量引用变量解引用变量描述符的出现顺序环境变量默认环境变量函数a (array)A (array operation)c (character)C (calculate)d (date)e (date)E (Emoji)f (foreach)i (if)I (invoke)j (juejuezi)L (logic calculate)n (natural language processing)r (random)R (range)w (while)W (do-while)生成模式eval模式HTML输出模式故障排除生成时错误... is not defined (jz001)Expected '...' or '...', but read end of input (jz101)Unexpected token: ... (jz102)Invalid character in tag name: '...'. Only hyphen, underline, latin letter and '$' are valid (jz103)Runtime error: ... (jz201)Internal error: ... (jz202)词库同步错误
一个用来表达对俊泽和赵总的思念,以及生成一些其他奇怪东西的程序。
俊泽生成器Web应用程序的诞生离不开junze-generator,random,axios,corpusZh,material-web,JueJueZiGenerator等开源项目。俊泽生成器本身也是一个使用DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE的开源项目。
俊泽生成器模板是生成字符串的模板。这句话不是废话文学,因为上一句话里的第一个模板是pattern,第二个模板是template。例如:
xxxxxxxxxx11%[%a:%{俊泽,cmb,crs,std}]不在的第%d天,%[a]%n(v)了%r(int,1,100)个%[a]的%n(n)
可能的生成结果:
xxxxxxxxxx11std不在的第164天,俊泽破土动工了45个cmb的主管部门
模板中可以包含一些以%开头的使用特定语法的表达式。这些表达式包括:函数,列表,变量。
生成一个列表,可以在a函数中使用
xxxxxxxxxx11%{item, ...}
变量定义可以保存模板或者生成的值,以供之后再次使用。变量名只能使用连字符,下划线,拉丁字母和美元符号。
在使用直接赋值模式定义变量时,会将生成的值存储进变量中。这样的变量称为值变量。
语法:
定义变量:
xxxxxxxxxx11%[<变量名>:<模板>]
调用变量:
xxxxxxxxxx11%[<变量名>]
样例:
模板:
xxxxxxxxxx11%[a:%c]%[b:%c]%[a]%[b]%[a]%[b]%[a:%c]%[a]
可能的生成结果:
xxxxxxxxxx11俊泽俊泽俊泽强强
在使用模板赋值模式定义变量时,会将生成使用的模板存储进变量,下次调用时会使用存储的模板重新生成。这样的变量称为模板变量。
语法:
定义变量:
xxxxxxxxxx11%[%<变量名>:<模板>]
调用变量:
xxxxxxxxxx11%[<变量名>]
样例:
模板:
xxxxxxxxxx11%[%a:%r(int,1,100)] %[b:%r(int,1,100)] %[a] %[b] %[a] %[b]
可能的生成结果:
xxxxxxxxxx1142 15 38 15 86 15
在定义变量或者引用变量时,在变量名称前加入&会返回变量名称而不是变量值。这种情况下的变量名称被称作变量引用。例如:
xxxxxxxxxx11%[&%a:%C(1,1,+)]%[a]
上述语句的生成结果是a2。
如果在变量名称前加入@,那么定义变量语句不会被执行,也不会有任何返回值。例如:
xxxxxxxxxx11%[@k:0]%[@%a:%[@k:%C(%[k],1,+)]]%[k], %[a]%[k]
上述语句的生成结果是0, 1。
特别的,如果在声明变量引用的时候不设置变量名称,那么它就是一个匿名变量引用。俊泽生成器在运行时会自动为其分配一个独一无二的名称。
对于一个值为变量引用的变量,在调用变量时在名称前加入*来解引用,从而获得变量引用所引用的值。它既可用于声明也可用于调用。例如:
xxxxxxxxxx11%[@ptr:%[&a:1]]%[*ptr], %[@*ptr:2]%[a]
上述语句的生成结果是1, 2。
变量引用符号&和无声符号@至多出现一个,且位于最开始。
变量解引用符号*至多出现一次,位于第二位。
模板变量符号%至多出现一次,位于第三位。
| 变量名 | 数据类型 | 描述 |
|---|---|---|
__t | 整数 | 当前生成是连续生成的第几次(从0开始) |
__year | 整数 | 输入的年份数值 |
__month | 整数 | 输入的月份数值 |
__date | 整数 | 输入的日期数值 |
__day | 整数 | 输入的时间是星期几 |
__today_year | 整数 | 今天的年份数值 |
__today_month | 整数 | 今天的月份数值 |
__today_date | 整数 | 今天的日期数值 |
__today_day | 整数 | 今天的时间是星期几 |
__input | 字符串 | 在”输入数据“一栏中输入的文本 |
变量__t在一些场合下很有帮助,你可以用它来实现类似循环的效果。例如:
xxxxxxxxxx11芝士第%C(%[__t],1,+)次生成。
关于日期的变量在一些场合下也非常有用。例如:
xxxxxxxxxx11疯狂星期%a(%{日,一,二,三,四,五,六},%[__today_day])v我%r(int,10,100)
语法:
xxxxxxxxxx21%函数名(<参数1>, <参数2>, ...)2%函数名
没有参数的函数可以省略参数列表。
从列表或字符串中选取一个元素。
语法:
xxxxxxxxxx11%a(<array>, [index])
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
array | 列表|字符串 | 从该列表中选择元素 |
index | 整数 | 从0开始的元素下标。如果留空或者不是整数则会从列表中随机选择一个 |
样例:
xxxxxxxxxx11%a(%{1,2,3,4},2)
xxxxxxxxxx113
xxxxxxxxxx11%a(%{1,2,3,4})
xxxxxxxxxx112
对列表或字符串执行指定的操作。
//TODO
在U+4E00到U+9fff范围内随机生成一个字符。
语法:
xxxxxxxxxx11%c
参数列表:
无参数。
样例:
模板:
xxxxxxxxxx11%c
可能的生成结果:
xxxxxxxxxx11媝
计算逆波兰表达式。
语法:
xxxxxxxxxx11%C(<op>, ...)
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
op | 浮点数|字符串 | 运算数或运算符 |
其中,可用的运算符如下:
| 运算符 | 描述 |
|---|---|
+ | 将两个运算数相加 |
- | 用前一个运算数减去后一个运算数 |
* | 将两个运算数相乘 |
/ | 用前一个运算数除以后一个运算数 |
// | 用前一个运算数除以后一个运算数,并向下取整 |
^ | 以前一个运算数为底数,后一个运算数为次数,计算幂 |
_ | 将前一个运算数保留到小数点后后一个运算数位 |
mod | 用前一个数整除以后一个数的余数 |
样例:
模板1:
xxxxxxxxxx11%C(1,2,+,4,*,17,4,//,+)
生成结果1:
xxxxxxxxxx1116
计算了表达式:。
模板2:
xxxxxxxxxx11%C(5,3,^,7,/,3,_)
生成结果2:
xxxxxxxxxx1117.857
计算了表达式:,并将结果保留到小数点后三位。
计算设置的日期到今天的日数。
语法:
xxxxxxxxxx11%d
参数列表:
无参数。
计算今天到设置的日期的日数。
语法:
xxxxxxxxxx11%e
参数列表:
无参数。
随机生成一个emoji字符。
语法:
xxxxxxxxxx11%E([c], ...)
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
c | 字符串 | emoji类型。如果参数省略,则为所有类型的emoji。 |
其中,emoji类型如下:
| 类型 | 描述 | 例子 |
|---|---|---|
p | People | 👱♀️, 🚶♀️, 😴, 😞 |
n | Animals & Nature | 🍀, 🐵, 🐚, 🌖 |
d | Food & Drink | 🍷, 🥐, 🥛, 🥦 |
a | Activities | 🤽♂️, 👩👧, 🥎, 🧑🍳 |
t | Travel & Places | 🌉, 🏚, 🌋, 🏦 |
o | Objects | 🗑, 🚽, 🪥, 🧫 |
s | Symbols | 🆑, 🔕, 🔶, ⭕ |
f | Flags | 🎌, 🏴, 🏳️🌈, 🏁 |
样例:
模板1:
xxxxxxxxxx11%[a:%E]%[a]俊泽距离高考%[a:%E(s)]%[a]还有%e天,%[a:%E(n)]%[a]CuteMB想要和他在%[a:%E(t)]%[a]%n(nl)%n(d)%n(v)%n(n)
可能的生成结果1:
xxxxxxxxxx11👨•👨•👦👨•👨•👦俊泽距离高考💲💲还有208天,🐢🐢CuteMB想要和他在🏫🏫湖底立刻袢边道
模板2:
xxxxxxxxxx11%[a:%E(n,d,a,o)]%[a]今日作业《机械波》二轮题%[a:%E(s)]%[a]21.30我发答案大家红笔自批改后拍照上传%[a:%E(o)]%[a]时间截止今晚23.59明天讲%[a:%E]%[a]
可能的生成结果2:
xxxxxxxxxx11🧫🧫今日作业《机械波》二轮题🎴🎴21.30我发答案大家红笔自批改后拍照上传⏱⏱时间截止今晚23.59明天讲⛄️⛄️
遍历列表。
语法
xxxxxxxxxx11%f(<list>,<iterate_variable>,<generated_value>)
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
list | 列表|字符串 | 遍历的列表或字符串 |
iterate_variable | 值变量引用 | 列表里的每个元素在遍历时会被存储到此变量中 |
generated_value | 变量引用 | 每次循环时会调用这个变量 |
样例:
模板:
xxxxxxxxxx11%[@sum:0]%f(%R(1,101),%[&i],%[&%:%[@sum:%C(%[sum],%[i],+)]])%[sum]
生成结果:
xxxxxxxxxx115050
注释:
这段代码计算了从1到100求和。
根据不同条件返回不同参数。
语法:
xxxxxxxxxx11%i(<condition>,[true_value],[false_value])
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
condition | 布尔型变量引用 | 判断条件,等于空字符串或者0时为假,否则为真 |
true_value | 变量引用 | 条件为真时的值 |
false_value | 变量引用 | 条件为假时的值 |
样例:
模板:
xxxxxxxxxx11一眼丁真,鉴定为%i(%[&:%r(int,0,1)],%[&:假],%[&:真])
可能的输出结果:
xxxxxxxxxx11一眼丁真,鉴定为假
调用变量。
语法:
xxxxxxxxxx11%I(<variable>)
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
variable | 变量引用 | 被调用的变量 |
样例:
模板:
xxxxxxxxxx11%[@a:1]%I(%[&a])
输出结果:
xxxxxxxxxx111
直通绝绝子生成器。
语法:
xxxxxxxxxx11%j(<verb>, <noun>)
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
verb | 字符串 | 动词 |
noun | 字符串 | 名词 |
样例:
模板1:
xxxxxxxxxx11%j(撸, cmb)
可能的生成结果1:
xxxxxxxxxx11忙里偷闲的生活碎片💜,救命🆘,今天又是撸 cmb的一天啦,不管啦,哈哈哈,这件🉑️‼️‼️‼️这件奶茶也绝绝子~~~冲鸭,路边捡到了一分钱,笑死,哒哒哒,我是一面镜子 所以 晚安 我碎啦🖤
模板2:
xxxxxxxxxx11%j(%n(v), 俊泽的%n(n))
可能的生成结果2:
xxxxxxxxxx11投递日常❤️ 救命🆘 今天又是巩固 俊泽的有机化学的一天啦 噎死莫拉 嘿嘿嘿 这件太牛了‼️‼️‼️这家店的小蛋糕也真的绝!!!无语子 路边捡到了一分钱 不管啦 嘿嘿嘿 我是一面镜子 所以 晚安 我碎啦💜
执行逻辑计算。
语法:
xxxxxxxxxx11%L(<operand1>, <operator>, [operand2])
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
operand1 | 视operator情况而定 | 运算数1 |
operator | 字符串 | 运算符 |
operand2 | 视operator情况而定 | 运算数2 |
其中,可用的运算符如下:
| 运算符 | 描述 |
|---|---|
== | 以字符串的方式比较是否相等,此时16和16.0不相等 |
!= | 以字符串的方式比较是否不相等 |
=== | 以数值的形式比较是否相等,此时16和16.0相等 |
!== | 以数值的形式比较是否不相等 |
> | 你猜这是什么 |
< | 同上 |
>= | 同上 |
<= | 我说这是判断运算数2能否推导出运算数1,你相信吗? |
|| | 以布尔型的形式进行逻辑或运算 |
&& | 以布尔型的形式进行逻辑与运算 |
! | 以布尔型的形式将运算数1逻辑取反 |
样例:
模板:
xxxxxxxxxx11%L(114514,==,1919810)
生成结果:
xxxxxxxxxx110
自然语言处理,其实就是指定随机生成词语的词性。
语法:
xxxxxxxxxx11%n(<p>, ...)
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
| p | 字符串 | 词性标记 |
其中,词性标记如下:
| 标记 | 词性 | 例子 | 收词数量 |
|---|---|---|---|
| a | 形容词 | 精辟,常见,骤然,愤恨 | 8850 |
| c | 连词 | 即使,其次,假使,但是 | 466 |
| d | 副词 | 已经,肆力,大加,动不动 | 2096 |
| e | 叹词 | 唔呀,吗,啊唷,罢 | 179 |
| f | 区别词 | 无形,长途,内在,自来 | 253 |
| g | 语素字 | 早 | 1 |
| h | 前接成分 | 伪,反,新,轻 | 87 |
| i | 习用语 | 添砖加瓦,旦夕祸福,阔步前进,有滋有味 | 7564 |
| j | 缩略语 | 中共,社科,市府,共盟 | 2113 |
| k | 后接成分 | 热,等,剂,炎 | 166 |
| m | 数词 | 二·三,二十七亿,七点三,三百五十四万二千 | 3596 |
| mq | 数词+量词 | 一部,一通,一套,一池 | 130 |
| n | 普通名词 | 老乡,核装置,电子游戏,司徒 | 54686 |
| nd | 方位名词 | 内心,东边,四外,头前 | 667 |
| nh | 人名 | 李传卿,邵太豹,丁秋生,李肇基 | 24609 |
| nhf | 姓 | 冷,恩,裘,戚 | 500 |
| nhs | 名 | 探奇,灵子,秀莲,二黑 | 2605 |
| ni | 机构名 | 中国科学院滨海市分院生理研究所,上海市物价局,沈阳铁西区公安局,上海市服装鞋帽公司 | 6003 |
| nl | 处所名词 | 后方,榜上,篮中,核内 | 1707 |
| nn | 族名 | 0 | |
| ns | 地名 | 隶融州,羊马河,马尔宾沙机场,越江 | 14308 |
| nt | 时间名词 | 后年,金秋,季候,酉时 | 1913 |
| nz | 其他专名 | 撒哥,锡伯尔台,金山庄,大贺 | 403 |
| o | 拟声词 | 叮零零,嘁嚓,扑咚,叽叽喳喳 | 725 |
| p | 介词 | 就是,给,正如,据此 | 258 |
| q | 量词 | 法郎,匣,卡路里,泡 | 849 |
| r | 代词 | 上一次,这下子,怎么回事儿,两者 | 592 |
| u | 助词 | 一来,末,那,得已 | 265 |
| v | 动词 | 专任,织花,渴慕,贴 | 32427 |
| vd | 趋向动词 | 挂上,扑来,浮上,找来 | 311 |
| vl | 联系动词 | 竟是,好象是,诚为,作为 | 155 |
| vu | 能愿动词 | 似可,挺会,自应,可得 | 175 |
| x | 非语素字 | 疖,眦,茏,卍 | 970 |
样例:
模板:
xxxxxxxxxx11俊泽距离高考还有%e天,CuteMB想要和他在%n(nl)%n(d)%n(v)%n(n)
可能的生成结果:
xxxxxxxxxx11俊泽距离高考还有240天,CuteMB想要和他在行间多么理会条件反射
生成随机数:
语法:
xxxxxxxxxx21%r(int, <min>, <max>)2%r(float, <min>, <max>, [digits])
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
min | 整数|浮点数 | 最小值(包含) |
max | 整数|浮点数 | 最大值(包含) |
digits | 整数 | 生成结果保留到小数点后位数 |
样例:
模板1:
xxxxxxxxxx11%r(int, 1, 100)
可能的生成结果1:
xxxxxxxxxx1142
模板2:
xxxxxxxxxx11%r(float, 10000, 20000, 3)
可能的生成结果2:
xxxxxxxxxx1119260.817
生成一个区间。
语法:
xxxxxxxxxx11%R(<start>, <stop>, [step])
参数列表:
| 参数名 | 数据类型 | 描述 |
|---|---|---|
start | 浮点数 | 区间起点(包含) |
stop | 浮点数 | 区间终点(不包含) |
step | 浮点数 | 步长。默认为1 |
样例:
模板:
xxxxxxxxxx11%R(1,10,2)
生成结果:
xxxxxxxxxx11["1","3","5","7","9"]
循环,直到指定的变量值变为假。
语法:
xxxxxxxxxx11%w(<condition>,<generated_value>)
参数列表:
| 变量名 | 数据类型 | 描述 |
|---|---|---|
condition | 布尔型变量引用 | 判断条件 |
generated_value | 变量引用 | 每次循环会调用这个变量 |
样例:
模板(在使用时需要删除缩进和换行,将它压成一行):
x1%[@pos:0]2%[@result:%[__input]]3%[@tokens:%{\%d,\%e,\%c,\%x}]4%[@handlers:%{%[&:%d],%[&:%e],%[&:%c],%[&%:%c]}]5%[@range:%R(0,%A(%[tokens],length))]6%f(%[range],%[&i],%[&%:7%[@t:%a(%[tokens],%[i])]8%w(%[&%:%L(%[pos:%A(%[result],indexOf,%[t])],!=,-1)],%[&%:9%[@h:%a(%[handlers],%[i])]10%[@before:%A(%[result],slice,0,%[pos])]11%[@after:%A(%[result],slice,%C(%[pos],2,+))]12%[@result:%[before]%[*h]%[after]]13])14])15%[result]
输入数据(存储在环境变量__input中的值):
xxxxxxxxxx11俊泽不在的第%d天,%c他
可能的生成结果:
xxxxxxxxxx11俊泽不在的第536天,掩他
注释:
事实上,这段代码使用俊泽生成器实现了一个早期版本的俊泽生成器。它会将输入数据中的%d替换成今天距离设置的日期过去的天数,%e替换成今天距离设置的日期的倒计时天数,%c替换成每次一样的随机汉字,%x替换成每次不一样的随机汉字。另外,这段代码不仅展示了while函数的操作,还集成了俊泽生成器的许多特性,如果你能够理解它,那么你应该能够熟练掌握俊泽生成器的使用方法。
其他与while相同,但是它会首先调用一次循环变量,再判断条件。
eval模式允许在生成时使用JavaScript模板字符串。
在eval模式下,以%开头的表达式将不再可用,取而代之的是一些全局对象:
其中,函数列表的方法键值即为上述列出的所有函数名称,例如:
xxxxxxxxxx11俊泽不在的第%r(int,1,100)天,%n(v)他。
使用eval模式即为:
xxxxxxxxxx11俊泽不在的第${junze.r('int',1,100)}天,${junze.n('v')}他。
eval模式具有潜在的风险,是因为它可以执行任意JavaScript代码,攻击者可能以此进行跟踪或者执行恶意代码。
在输出时启用HTML,例如:
xxxxxxxxxx11<iframe src="//player.bilibili.com/player.html?bvid=%a(%{BV1GJ411x7h7,BV1AK411g7xc,BV1Qt411T7VS,BV1j4411W7F7})&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
会随机生成一个视频播放的嵌入式框架。
HTML输出模式具有潜在的风险,是因为它可以向网页中嵌入任何内容,攻击者可能以此进行跟踪或者执行恶意代码。
... is not defined (jz001)函数未定义。可能输入了错误的函数名称。
Expected '...' or '...', but read end of input (jz101)输入在不应结束的地方结束。请检查括号是否匹配。
Unexpected token: ... (jz102)意外的符号。请检查语法。
Invalid character in tag name: '...'. Only hyphen, underline, latin letter and '$' are valid (jz103)变量名中出现非法字符。
Runtime error: ... (jz201)运行时错误。请检查函数的参数列表以及参数的数据类型是否合法。
Internal error: ... (jz202)内部错误。可能是由于俊泽生成器存在漏洞。
请检查网络是否科学。