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

JavaScript正则提取字符串中带连字符的数字问题

解决JavaScript提取所有带连字符数字的问题

看来你卡在了提取字符串里所有带连字符的数字序列上,之前的正则要么只能匹配第一个,要么不够灵活适配更多连字符的情况,我来帮你搞定这个问题。

首先,先分析你现有代码的问题:

  • 你的正则没有添加全局匹配标志g,默认情况下match()只会返回第一个匹配结果
  • 正则的写法太固定,只能匹配刚好两个连字符的情况,没法处理像12-345-67-8这种多连字符的场景

正确的正则写法

我们需要一个能匹配首尾是数字、中间由连字符分隔数字的任意长度序列,同时开启全局匹配:

const regex = /\d+(?:-\d+)+/g;

解释一下这个正则的组成:

  • \d+:匹配一个或多个数字(确保开头是有效数字,避免匹配到以连字符开头的无效内容)
  • (?:-\d+)+:非捕获组,匹配一个或多个「连字符+数字」的组合,这样就能支持任意数量的连字符
  • g:全局匹配标志,告诉match()要找出所有符合条件的结果

完整代码示例

把你的代码替换成下面这样,就能提取到所有目标值了:

var msg = 'The solvent 67-64-1 is not compatible with 35554-44-04 and 123-45-678-9';
var regex = /\d+(?:-\d+)+/g;
var res = msg.match(regex);
console.log(res); 
// 输出:["67-64-1", "35554-44-04", "123-45-678-9"]

额外说明

如果你的场景里允许数字序列只有一个连字符(比如123-45),这个正则也能完美匹配;要是你需要更严格的规则(比如固定N个连字符),可以再调整正则的结构,但目前这个写法应该能覆盖你提到的所有情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:27:43