Skip to content

JavaScript 规则

Reader-Rust 的 JS 规则运行在服务端 QuickJS 中,不是浏览器页面环境。

基本语法

支持三种写法:

写法说明
js:...整条规则就是 JS
@js:...先按普通规则取值,再把结果交给 JS
<js>...</js>@js: / js: 等价,取决于放置位置

示例:

json
{
  "author": ".author@text@js:input.replace(/^作者[::]?/, '').trim()"
}

可用变量

变量类型说明
inputstring当前输入值
resultstringinput 的别名
srcstringinput 的别名
base_urlstring当前基础 URL
baseUrlstringbase_url 的别名
urlstring默认等于 base_url
keystring搜索关键词,仅 URL 规则里通常有值
pagenumber页码,仅 URL 规则里通常有值
sourceobject当前书源简化上下文,含 key / getKey()
cacheobjectget(key) / put(key, value)
cookieobject当前只有 removeCookie(key) 占位方法
javaobject一组 Legado 风格辅助方法
bookobject预留对象,默认空
chapterobject预留对象,默认空
titlestring预留值,部分场景会覆盖
nextChapterUrlstring预留值,默认空
rssArticleobject预留对象,默认空

formatJs 这类带绑定的规则还会额外注入上下文变量,例如 indexchapter

java / 全局辅助函数

java

方法说明
java.ajax(spec)发起请求,spec 形如 url,{"method":"POST"}
java.get(url) / java.post(url, body) / java.put(url, body)简单 HTTP 请求
java.md5Encode(text)MD5
java.timeFormat(ts)时间格式化
java.androidId() / java.deviceID()设备 ID
java.base64Encode(text) / java.base64Decode(text)Base64
java.encodeURIComponent(text) / java.decodeURIComponent(text)URL 编码
java.encodeURI(text) / java.decodeURI(text)URL 编码
java.now()当前毫秒时间戳
java.uuid()UUID

全局函数

方法说明
kv_get(key) / kv_put(key, value)共享 KV
regex_replace(input, pattern, replace)正则替换
strip_ws(input)清理空白字符

常用操作

字符串处理

js
input.replace(/pattern/g, '')
input.match(/chapter_(\d+)/)?.[1] || ''
new URL(input, baseUrl).href
input.split('\n').filter(Boolean)

数组返回

json
{
  "chapterList": "js:[{ chapterName: '第一章', chapterUrl: '/1' }, { chapterName: '第二章', chapterUrl: '/2' }]"
}

js: 规则返回数组或对象时,解析器会自动把结果转成 JSON 字符串,再交给后续阶段消费。

URL 规则

json
{
  "searchUrl": "/search?wd={{java.encodeURIComponent(key)}}&page={{page}}"
}

目录标题格式化

json
{
  "ruleToc": {
    "formatJs": "`${index}. ${title}`"
  }
}

复用 jsLib

json
{
  "jsLib": "function cleanAuthor(v){ return v.replace(/^作者[::]?/, '').trim(); }",
  "ruleSearch": {
    "author": ".author@text@js:cleanAuthor(input)"
  }
}

当前限制

  • 没有 documentwindowElement 这类浏览器 DOM API
  • 不要依赖浏览器控制台
  • 如果需要操作 HTML 结构,优先先用 CSS / XPath / JSONPath 缩小范围,再让 JS 处理字符串
  • JS 比普通选择器慢,能不用就不用