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

JavaScript开发Pig Latin翻译器标点出现在词中而非末尾如何解决

Pig Latin翻译器标点位置异常修复方案

问题核心

现有代码未区分单词末尾的标点和字母内容,标点被识别为单词的一部分参与转换逻辑,导致位置错位。

修复思路

  • 处理每个单词前,先用正则提取末尾的非字母字符单独存储
  • 仅对纯字母部分执行Pig Latin转换
  • 转换完成后再把提取的标点拼接回结果末尾

修复后完整代码

HTML代码

<input id="textInput" />
<p id="textOutput"></p>

JS代码

const textInput = document.getElementById("textInput");
const textOutput = document.getElementById("textOutput");
const vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"];
const ending = "-yay";

textInput.addEventListener("keyup", (e) => {
  const input = e.target.value;
  const words = input.split(" ");
  const output = words.map((word) => pigLatinConverter(word)).join(" ");
  textOutput.innerText = output;
});

const pigLatinConverter = (input) => {
  // 拆分单词的字母部分和末尾标点部分
  const [, pureWord, punctuation = ''] = input.match(/^([a-zA-Z]+)([^a-zA-Z]*)$/) || [, input, ''];
  let output;
  
  if (vowels.includes(pureWord[0])) {
    output = pureWord + ending;
  } else {
    let consonants = "";
    for (let i = 0; i < pureWord.length; i++) {
      if (vowels.includes(pureWord[i])) {
        break;
      }
      consonants += pureWord[i];
    }
    if (consonants === "") {
      output = pureWord.substring(consonants.length) + " ";
    } else {
      output = pureWord.substring(consonants.length) + `-${consonants}ay`;
    }
  }
  // 拼接回标点
  return output + punctuation;
};

效果验证

输入There are no pizzas?时,输出结果为ere-Thay are-yay o-nay izzas-pay?,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:36:03