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

如何用JavaScript检测连续3个及以上以The开头的相邻句子?

实现文本连续句子检查功能的优化方案

问题分析

你当前的代码存在几个核心限制:

  • 仅硬编码检查5个句子,无法适配任意长度的文本
  • 句子分割后未清理空内容和多余空格,导致startsWith判断逻辑混乱
  • 仅统计以"The"开头的句子总数,未实现连续3个及以上的检查与定位功能

改进后的完整代码

<!DOCTYPE html>
<html>
<body>

检查是否存在3个及以上连续以"The"开头的句子

<form id="quiz" name="quiz">
  <input id="text1" type="text" name="question1" placeholder="粘贴需要检查的文本">
  <input id="button" type="button" value="检查文本" onclick="checkConsecutiveTheSentences();">
</form>

<p id="sentencesList"></p>
<p id="result"></p>

<script>
function checkConsecutiveTheSentences() {
  // 获取输入文本并做非空校验
  const inputText = document.quiz.question1.value.trim();
  if (!inputText) {
    document.getElementById("result").innerHTML = "请输入需要检查的文本";
    return;
  }

  // 分割句子并清理无效内容:按标点分割后,去除前后空格、过滤空字符串
  const sentences = inputText.split(/[.!?]/)
    .map(sentence => sentence.trim())
    .filter(sentence => sentence.length > 0);

  // 展示分割后的句子列表
  document.getElementById("sentencesList").innerHTML = "分割后的句子:<br>" + sentences.join("<br>");

  // 遍历检查连续以"The"开头的句子
  let consecutiveCount = 0;
  let startIndex = -1;
  const validSequences = [];

  for (let i = 0; i < sentences.length; i++) {
    const startsWithThe = sentences[i].toLowerCase().startsWith("the");
    
    if (startsWithThe) {
      consecutiveCount++;
      // 记录连续序列的起始位置
      if (consecutiveCount === 1) {
        startIndex = i;
      }
      // 当连续数达标,或到序列末尾时,记录该连续段信息
      if (consecutiveCount >= 3 && (i === sentences.length - 1 || !sentences[i+1].toLowerCase().startsWith("the"))) {
        validSequences.push({
          start: startIndex + 1, // 转为用户易读的1-based索引
          count: consecutiveCount
        });
        consecutiveCount = 0;
        startIndex = -1;
      }
    } else {
      // 中断连续,重置计数
      consecutiveCount = 0;
      startIndex = -1;
    }
  }

  // 输出检查结果
  const resultElement = document.getElementById("result");
  if (validSequences.length === 0) {
    resultElement.innerHTML = "未找到3个及以上连续以\"The\"开头的句子";
  } else {
    let resultText = "找到以下符合条件的连续句子序列:<br>";
    validSequences.forEach(item => {
      resultText += `- 从第${item.start}句开始,连续${item.count}句均以"The"开头<br>`;
    });
    resultElement.innerHTML = resultText;
  }
}
</script>

</body>
</html>

关键改进说明

  1. 句子分割逻辑优化

    • 用trim()统一去除句子前后空格,解决原代码中需要分别判断"The"和" The"的冗余逻辑
    • 用filter过滤分割后产生的空字符串(比如文本结尾标点导致的无效内容)
  2. 动态连续检查

    • 遍历所有句子,通过consecutiveCount和startIndex两个变量,实时跟踪连续符合条件的句子状态
    • 无需硬编码句子数量,自动适配任意长度的输入文本
  3. 用户友好的交互

    • 增加输入为空的校验,避免无意义的处理
    • 展示分割后的句子列表,方便用户核对原始内容
    • 明确输出符合条件的连续段位置和数量,结果直观清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:06:22