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

如何在JavaScript的RegExp对象中使用带长度限制的正则表达式

错误原因

你遇到的SyntaxError是因为JavaScript正则引擎不支持{m,n}+格式的占有量词,你之前能正常运行的正则编译器大概率遵循PCRE正则规范,和JS的ECMAScript正则标准存在语法差异。
你写的{1,4}+里的末尾+属于占有量词语法,在JS中会被识别为重复运算符但前置没有可匹配的单元,因此抛出Nothing to repeat报错。

修复方案

直接删除所有{1,4}后面多余的+即可,{1,4}本身就已经实现了「匹配1-4位十六进制字符」的长度限制逻辑,不需要额外加+。

修复后代码

// 移除所有{1,4}后的非法+符号
const ipv6="([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4})";
const regex = new RegExp(ipv6);
const result = SAMPLE_STRING.match(regex);
console.log(result);

如果需要匹配完整的IPv6字符串而非提取子串,可以在正则首尾补充起止标识符:

const ipv6="^([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4}):([a-zA-Z0-9]{1,4})$";

补充说明

当前正则仅能匹配未做::压缩的全写IPv6地址,如果需要匹配含压缩段的标准IPv6地址,还需要补充对零压缩规则的适配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:24:05