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

JavaScript正则需求:匹配<与>间及单个<后的字符并实现计数

解决JavaScript中统计<与>之间及未闭合<后字符数的问题

嘿,我来帮你搞定这个正则统计的需求!根据你的描述,我们需要同时处理**已闭合的<xxx>和未闭合的<xxx**两种场景,统计对应的字符长度。下面是具体的实现方案:

正则表达式设计

我们可以用这个正则来匹配两种场景:

/<([^>]*)>?/g

正则解释:

  • <:精准匹配开头的小于号
  • ([^>]*):捕获组,匹配任意非大于号的字符(0个或多个)——这就是我们需要统计的核心内容
  • >?:匹配可选的大于号,兼容已闭合和未闭合的情况
  • g:全局匹配标志,确保找到字符串中所有符合条件的片段

JavaScript实现代码

下面是一个可以直接使用的函数,它会遍历所有匹配项并累加总字符数:

function countAngleBracketContentLength(input) {
  const regex = /<([^>]*)>?/g;
  let match;
  let totalLength = 0;

  // 循环匹配所有符合条件的片段
  while ((match = regex.exec(input)) !== null) {
    // 捕获组1的内容就是<之后到>(或字符串结尾)的字符
    totalLength += match[1].length;
  }

  return totalLength;
}

// 测试用例
console.log(countAngleBracketContentLength("Hello <world>! I'm typing <test")); 
// 输出:5(<world>的内容长度) + 4(<test的内容长度)= 9
console.log(countAngleBracketContentLength("<abc><def>xyz<gh")); 
// 输出:3 + 3 + 2 = 8
console.log(countAngleBracketContentLength("Empty brackets: <> and <")); 
// 输出:0(<>的内容) + 0(<后面无字符)= 0

如果你需要分别获取每个匹配片段的长度(而不是总和),可以用这个版本:

function getEachBracketContentLength(input) {
  const regex = /<([^>]*)>?/g;
  let match;
  const lengths = [];

  while ((match = regex.exec(input)) !== null) {
    lengths.push(match[1].length);
  }

  return lengths;
}

// 测试
console.log(getEachBracketContentLength("Hello <world>! I'm typing <test")); 
// 输出:[5, 4]

边界情况说明

  • 空的<>:会被匹配,但捕获组内容为空,长度计入0
  • 嵌套的<(比如<a<b>):正则会把从第一个<到>之间的所有内容(包括内部的<b)都统计进去,符合你“单个<后到后续>闭合前”的需求
  • 字符串末尾的<:会匹配<之后到结尾的所有字符(如果有的话)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:26:31