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

