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

自学JavaScript:如何遍历字符串并在HTML中生成独立列表项

解决系统信息字符串拆分为独立列表项的问题

我明白你现在的困扰——把一大段系统信息塞进单个列表项里确实乱糟糟的。咱们可以通过分割字符串+处理特殊子项的方式,把每条信息拆成独立的<li>,甚至把Hotfix、网卡这种有子内容的部分做成嵌套列表,让结构更清晰。

第一步:调整HTML结构

先把原来单个<li>的结构改成空的有序列表,方便我们插入生成的所有列表项:

<ol id="system-info"></ol>

第二步:修改JavaScript代码

核心思路是先把原始字符串按“键名: 值”的规则分割成单独条目,再处理Hotfix、网卡这类包含子项的特殊内容,最后把所有内容转换成列表项插入到HTML里:

// 你的原始系统信息字符串
const data = "Host Name: COMPUTERHOPE OS Name: Microsoft Windows 10 Pro OS Version: 10.0.10586 N/A Build 10586 OS Manufacturer: Microsoft Corporation OS Configuration: Standalone Workstation OS Build Type: Multiprocessor Free Registered Owner: Computerhope Registered Organization: Computer Hope Product ID: 00000-00000-00000-AAAAA Original Install Date: 12/17/2015, 7:09:50 PM System Boot Time: 3/28/2016, 6:57:39 AM System Manufacturer: Dell Inc. System Model: XPS 8300 System Type: x64-based PC Processor(s): 1 Processor(s) Installed. [01]: Intel64 Family 6 Model 42 Stepping 7 Genuine Intel~3401 Mhz BIOS Version: Dell Inc.A06, 10/17/2011 Windows Directory: C:\WINDOWS System Directory: C:\WINDOWS\system32 Boot Device: \Device\HarddiskVolume1 System Locale: en-us; English(United States) Input Locale: en-us; English(United States) Time Zone: (UTC-07:00) Mountain Time(US & Canada) Total Physical Memory: 8,174 MB Available Physical Memory: 2,955 MB Virtual Memory: Max Size: 16,366 MB Virtual Memory: Available: 6,455 MB Virtual Memory: In Use: 9,911 MB Page File Location(s): C:\pagefile.sys Domain: WORKGROUP Logon Server: \\MicrosoftAccount Hotfix(s): 10 Hotfix(s) Installed. [01]: KB3116900[02]: KB3124200[03]: KB3124262[04]: KB3124263[05]: KB3135173[06]: KB3139907[07]: KB3140741[08]: KB3140743[09]: KB3140768[10]: KB3144756 Network Card(s): 2 NIC(s) Installed. [01]: DW1501 Wireless-N WLAN Half-Mini Card Connection Name: Wi-Fi Status: Media disconnected[02]: Broadcom NetLink(TM) Gigabit Ethernet Connection Name: Ethernet DHCP Enabled: Yes DHCP Server: 192.168.1.1 IP address(es)[01]: 192.168.1.52[02]: fe00::b0b0:0000:0000:0000 Hyper-V Requirements: VM Monitor Mode Extensions: Yes Virtualization Enabled In Firmware: Yes Second Level Address Translation: Yes Data Execution Prevention Available: Yes";

// 正则表达式:匹配每个顶级条目开头(比如"Host Name:"、"OS Name:"这种格式)
const splitTopLevel = /(?=[A-Z][a-z]+(?: [A-Z][a-z]+)*: )/g;
// 把原始字符串分割成单个顶级条目数组
let topLevelItems = data.split(splitTopLevel);

// 处理每个条目,重点处理带子项的内容
const processedItems = topLevelItems.map(item => {
  // 处理Hotfix子项
  if (item.includes("Hotfix(s):")) {
    const [hotfixTitle, hotfixContent] = item.split("Installed. ");
    // 分割每个Hotfix条目
    const hotfixList = hotfixContent.split(/(?=\[\d+\]: )/g)
      .map(hf => `<li>${hf.trim()}</li>`)
      .join('');
    return `${hotfixTitle.trim()} Installed.<ol>${hotfixList}</ol>`;
  }
  // 处理网卡子项
  else if (item.includes("Network Card(s):")) {
    const [nicTitle, nicContent] = item.split("Installed. ");
    // 分割每个网卡条目
    const nicList = nicContent.split(/(?=\[\d+\]: )/g)
      .map(nic => {
        // 把网卡的子属性(比如Connection Name、Status)也拆成子列表
        const nicDetails = nic.split(/(?=[A-Z][a-z]+(?: [A-Z][a-z]+)*: )/g)
          .map(detail => `<li>${detail.trim()}</li>`)
          .join('');
        return `<li>${nicDetails}</li>`;
      })
      .join('');
    return `${nicTitle.trim()} Installed.<ol>${nicList}</ol>`;
  }
  // 普通条目直接返回整理后的内容
  else {
    return item.trim();
  }
});

// 把所有处理好的条目转换成<li>标签
const finalListHtml = processedItems.map(item => `<li>${item}</li>`).join('');

// 插入到页面的有序列表中
document.getElementById("system-info").innerHTML = finalListHtml;

代码说明

  1. 正则分割:用(?=[A-Z][a-z]+(?: [A-Z][a-z]+)*: )这个正向预查正则,找到每个新的“键名:”开头的位置,把字符串分割成独立的条目,不会破坏键名本身。
  2. 特殊子项处理:针对Hotfix和网卡这种包含多个子条目的内容,进一步分割并生成嵌套的<ol>列表,让信息层级更清晰。
  3. 生成HTML:把每个处理后的条目转换成<li>标签,最后一次性插入到页面的有序列表中,避免频繁操作DOM影响性能。

这样修改后,每条系统信息都会成为独立的列表项,子内容也会以嵌套列表的形式展示,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:12:31