使用方法
- 页面打开时八类空白已经各填了一个示例词(小明、发光的、企鹅……),下方故事区直接显示拼好的成品,你立刻能看到效果。
- 把八类空白逐个换成你自己的词:人名、形容词、动物、地点、动词、食物、数字、副词。词越不搭,故事越好笑——这是 MadLibs 的乐趣所在。
- 「故事模板」下拉框里选一个模板(共 3 个),或在任意输入框按 Enter 重新生成;点「生成故事」按当前模板与词拼出故事。
- 点「随机换模板」会在三个模板里随机挑一个再拼,同一个词库能讲出三种完全不同的故事;点「复制故事」把成品抄成纯文本,可直接发群或贴文档。
- 想从头玩就点「清空重填」,八个输入框一起变空,故事区回到提示语。所有内容只在本地,刷新即清空。
这个 MadLibs生成器能解决什么问题
一是给聚会和破冰提供现成的乐子。MadLibs 不需要任何准备,把词塞进空白就能当场产出笑点,适合朋友聚会、家庭游戏、课堂暖场,比干讲笑话门槛低得多。
二是帮孩子练词性。要填对「形容词」「动词」「副词」,孩子得先分清词性,否则故事会读不通——这种在错误里学习的反馈比背定义快。本页把八类空白直接标成词性,就是顺着这个用途设计的。
三是给写作文找灵感。卡壳时先用填空把骨架搭起来,再顺着骨架补细节,比对着空白页硬想容易启动。模板里的荒诞设定常常能撬动意想不到的情节。
四是做社交分享的轻内容。一篇拼好的脑洞故事很短、很适合截图发群,「复制故事」按钮让分享零成本。它不追求文采,追求的是「三秒看懂、一笑转走」。
本页不做这些事:不写长篇小说、不做语法润色、不联网找素材。它是个本地填空玩具,复杂创作请另寻专业工具。
原理和变量:技术内核六问
① 具体函数是什么?本质是字符串模板替换。每个模板是一段带占位符的中文文本,占位符写成 [[r1]] 到 [[r8]] 八种,分别对应八类空白;脚本读走八个输入框的值,用正则把占位符逐个换成对应词,拼成完整故事。没有任何随机语法,只有确定性的替换。
② 参数如何取舍?空白固定为八类:人名、形容词、动物、地点、动词、食物、数字、副词。选这八类是因为它们最容易制造反差笑点,且都是常见词性,填空零门槛。没有加「介词」「连词」之类,是因为它们填空难度高、笑点低,装进 8 KB 内联脚本也不划算。
③ 遵循哪套标准或约定?占位符用双中括号包裹,是 MadLibs 类工具的通用写法,避免和正文里的单括号、花括号混淆。模板里的词序、标点、衔接都按中文口语习惯写,保证任意合法词填进去都能读通,不会出现「的的不协调」。
④ 输入到输出如何映射?输入八个字符串,输出一段中文故事。映射是确定性的:同一组词 + 同一模板永远得到同一篇故事;换模板则在同一组词上换一副骨架,产出不同故事。随机只作用于「选哪个模板」,不改动你填的词。
⑤ 边界阈值在哪里?单条输入上限 20 个字符(数字框 0~999),防止超长词把句子撑破;空白未填时占位符会显示「(未填)」而不是留空,保证故事读起来仍是完整句子。模板固定 3 个,不动态拉取,避免联网与加载失败。
⑥ 最常见误用是什么?把 MadLibs生成器当成正经写作工具,指望它产出能直接用的文案。它的价值在「随机反差带来的笑点」,不在文采。要写严肃内容请另用正文写作类工具,本页只是个本地填空小游戏。
完整示例(数值仅作演示)
与页面默认值完全一致:八类空白分别填 小明 / 发光的 / 企鹅 / 老冰箱里 / 转圈 / 西瓜 / 7 / 悄悄地,模板选「一 · 冰箱里的企鹅」。替换后得到:
上周六,小明在老冰箱里发现了一只发光的企鹅。它正抱着一块西瓜,悄悄地对着天花板转圈,一共转了7圈。从那以后,小明每天都会带一支笔,把这只企鹅的怪事记进日记本。
逐占位符核对:[[r1]]→小明(出现 2 次,人名前后一致)、[[r2]]→发光的、[[r3]]→企鹅(出现 2 次)、[[r4]]→老冰箱里、[[r5]]→转圈、[[r6]]→西瓜、[[r7]]→7、[[r8]]→悄悄地。注意同一占位符在模板里出现多次时,全部换成同一个词,这正是 MadLibs 的精髓——重复制造强调与荒诞。
换模板同词库立刻变样:选「二 · 深夜大盗」,同样的词会拼出「深夜,小明潜入老冰箱里,想偷走那只发光的企鹅。结果企鹅抢先一步,叼着西瓜悄悄地转圈,把小明吓了7跳……」。同一个词库,三副骨架,三篇故事,零额外输入。
输入范围与对照表
八类空白的词性与填写建议如下表。它们不是硬性校验,只是帮你更快想词:
| 序号 | 空白 | 词性 | 示例 | 填反差词更好笑 |
|---|---|---|---|---|
| 1 | 人名 | 名词 | 小明、阿强 | 用严肃名人更违和 |
| 2 | 形容词 | 形容词 | 发光的、巨大的 | 越夸张越好 |
| 3 | 动物 | 名词 | 企鹅、长颈鹿 | 和场景越不搭越逗 |
| 4 | 地点 | 名词 | 老冰箱里、月球 | 日常地点最出戏 |
| 5 | 动词 | 动词原形 | 转圈、唱歌 | 配荒诞主语 |
| 6 | 食物 | 名词 | 西瓜、泡面 | 随手可见的最稳 |
| 7 | 数字 | 数词 | 7、99 | 大数更有喜感 |
| 8 | 副词 | 副词 | 悄悄地、疯狂地 | 越肉麻越反差 |
结果边界和舍入
- 单条输入上限 20 字符,数字框 0~999。超长词会把句子撑破、破坏排版,所以前端直接卡住。数字超过 999 也会被拒,避免「吓了9999跳」这类读起来别扭的表达。
- 空白未填显示「(未填)」而非留白。这保证故事始终是完整句子,不会出现「小明在抱著一块」这种断句。你想看空白效果,可以故意留空观察占位符行为。
- 同一占位符多处出现时统一替换。模板里
[[r1]]出现几次就填几次同一个词,这是 MadLibs 的固定规则,不会每次随机变。若你希望同一模板里人名前后不一致,那是模板设计问题,不是 bug。 - 模板固定 3 个,不联网拉取。随机只在这 3 个里挑,不会临时下载新模板,也就没有加载失败或隐私外泄的风险。需要更多模板是产品层面的事,不在本页范畴。
- 输入会被原样拼入故事。脚本不做内容审查、不转义 HTML(故事区用纯文本渲染),所以你填什么就显示什么。请勿填入会破坏阅读的内容,本页对此不做过滤。
- 全部在浏览器本地完成。填的词和拼出的故事都不离开你的设备,刷新页面即清空,没有历史记录,适合处理带点私密的玩笑素材。
常见问题
为什么有的词在故事里出现了两次?
因为模板里同一个占位符被写了多处,比如 [[r1]] 在人名前后各出现一次。脚本会把它们统一替换成你填的同一个词,这是 MadLibs 的精髓——重复制造强调与荒诞。如果你只想让它出现一次,那是模板写法的问题。
占位符 [[r1]] 是什么,能不能自己改模板?
[[r1]] 到 [[r8]] 是八类空白的标记,双中括号是为了和正文里的普通括号区分。本页模板是内置固定的,不开放自定义编辑,避免联网与脚本注入风险;想写自己的模板可以用纯文本编辑器手动替换这些标记。
留空的空白会怎样?
留空时该占位符会显示成「(未填)」,故事仍是完整可读的句子,不会断句。这是刻意的设计:让你能直观看到哪个位置原本该填什么词,也方便教学时让孩子先认位置再填词。
「随机换模板」会改我填的词吗?
不会。随机只决定用三个模板里的哪一个来套你当前的词库,你填的八类词原样不动。所以同一个词库能讲出三种完全不同的故事,零额外输入——这正是它好玩的地方。
能不能生成更长的故事?
本页模板都控制在百字以内,定位是「三秒看懂、一笑转走」的轻内容,不做长篇小说。要更长的内容,可以把拼好的故事复制到文档里自己续写,或找专门的写作工具。
填的词会上传到服务器吗?
不会。所有替换都在浏览器本地完成,填的词和拼出的故事都不发送任何请求(可在开发者工具 Network 面板自查),刷新即清空,无历史记录。它适合处理带点私密的玩笑素材。
数字框为什么限制在 0~999?
因为「转了9999圈」「吓了999跳」这类表达读起来既别扭又失真,超出日常叙事范围。0~999 覆盖了绝大多数搞笑场景,也避免超长数字撑破句子排版。需要夸张一点用 99、520 这类就够有喜感了。
这个 MadLibs生成器适合孩子用吗?
适合,而且它本就按「练词性」设计:要填对形容词、动词、副词,孩子得先分清词性,填错故事就别扭,这种即时反馈比背定义更有效。建议在家长陪同下玩,顺便把词性讲一遍。