You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GAS爬取场景下拆分同字符串内英日配音演员姓名的实现方法

GAS爬取FEH英雄数据的VA姓名拆分方案

问题描述

使用Google Apps Script(GAS)爬取火焰纹章英雄(Fire Emblem Heroes)GamePress站点数据、写入谷歌电子表格时,英文、日文配音演员姓名共同存储在HTML属性data-va中,姓名字数、格式无统一规则:

  • 部分英文名带中间名缩写点(如Joe J. Thomas)
  • 部分英文名是3段结构(如Cassandra Lee Morris)
    原有拆分逻辑仅能适配带缩写点的2段英文名,3段式姓名需要单独硬编码边界case,可维护性差;尝试爬取页面内姓名标签做匹配校验未达预期。

待拆分字符串样例及预期拆分结果:

  • 样例a:Julie Kliewer Uchida Maaya (内田真礼) → 英文名Julie Kliewer,日文名Uchida Maaya (内田真礼)
  • 样例b:Joe J. Thomas Suzuki Tatsuhisa (鈴木達央) → 英文名Joe J. Thomas,日文名Suzuki Tatsuhisa (鈴木達央)
  • 样例c:Cassandra Lee Morris Fujiwara Natsumi (藤原夏海) → 英文名Cassandra Lee Morris,日文名Fujiwara Natsumi (藤原夏海)

实现思路

观察所有data-va属性值的固定结构规律,不需要从前往后判断英文名长度,从后往前定位分割边界即可覆盖所有格式:

  1. 所有日文名末尾都带半角括号包裹的日文汉字名,左括号(是稳定的定位标记
  2. 括号前的日文罗马音固定为「日文姓 日文明」两段结构,仅含1个空格
  3. 从左括号位置向前遍历,找到第二个空格的位置,就是英文名和日文名的分割点——分割点前所有内容为英文名(无论2段、带缩写、3段结构都完整保留),分割点后所有内容为完整日文名(含罗马音和括号内汉字名)

替换代码

将原有代码中拆分VA的逻辑段(从let index = vas[i].includes(".")到针对Cassandra Lee的硬编码判断块)全部替换为以下代码即可:

// 自动拆分英/日配音姓名,无需硬编码特殊case
const vaRaw = vas[i].trim();
// 定位日文汉字名的左括号起始位置
const bracketPos = vaRaw.indexOf('(');
// 提取括号前的罗马音段落
const romajiSeg = vaRaw.slice(0, bracketPos).trim();
// 定位罗马音段内的最后一个空格(日文明前),再往前找一个空格就是英日姓名分界
const lastSpacePos = romajiSeg.lastIndexOf(' ');
const splitPos = romajiSeg.lastIndexOf(' ', lastSpacePos - 1);
// 提取拆分结果
const en_va = vaRaw.slice(0, splitPos).trim();
const jp_va = vaRaw.slice(splitPos + 1).trim();

适配说明

  • 自动适配2段常规英文名、带中间名缩写的英文名、3段结构英文名,不需要单独写边界判断
  • 原有针对Cassandra Lee Morris的硬编码修正逻辑可以直接删除,新逻辑会自动识别该类姓名
  • 只要站点保持「英文名 + 日文罗马音(姓+名) + (日文汉字名)」的存储格式,后续新增英雄不需要调整拆分逻辑

内容的提问来源于stack exchange,提问作者Nitram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:18:23