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
相关产品推荐
相关产品推荐

