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

如何用JavaScript提取冒号间数字并转换为数组?

解决从字符串中提取:数字:格式内容并转为数组的问题

嘿,我来帮你搞定这个提取图标ID的问题!咱们先分析下你之前的尝试为啥没达到预期,再给你靠谱的实现方式。

你之前尝试的问题分析

  • 第一个用substring的方法:只能定位最后一对冒号的位置,根本没法遍历所有匹配的:数字:,自然拿不到多个ID;
  • 第二个match(":(.*):"):这里用了贪婪匹配的正则,会从第一个:开始一直匹配到最后一个:,把中间的文本也包含进去了,结果肯定不对;
  • 第三个match(/:([^:]+):/):这个正则本身能匹配单个:数字:,但没加全局匹配标志g,所以只会返回第一个匹配结果,拿不到后面的:456:。

正确的实现方法

我们需要用带全局标志的正则匹配所有:数字:模式,然后提取其中的数字部分。这里有两种简单的实现方式:

方法1:使用match + map

const comment = 'This is my fav item :9044: and :456:';
// 先匹配所有`:数字:`格式的字符串,再截取掉前后的冒号
const iconIds = comment.match(/:\d+:/g)?.map(item => item.slice(1, -1)) || [];
console.log(iconIds); // 输出: ["9044", "456"]
// 如果需要转成数字类型,再加一步map(Number)
const numericIconIds = iconIds.map(Number);
console.log(numericIconIds); // 输出: [9044, 456]

方法2:使用matchAll(更精准)

matchAll会返回所有匹配结果的迭代器,我们可以直接提取捕获组里的数字:

const comment = 'This is my fav item :9044: and :456:';
// 正则里用括号捕获数字部分,加g全局匹配
const matches = comment.matchAll(/:(\d+):/g);
// 把迭代器转成数组,提取每个匹配的第一个捕获组
const iconIds = Array.from(matches, match => match[1]);
// 转数字类型
const numericIconIds = iconIds.map(Number);
console.log(numericIconIds); // 输出: [9044, 456]

正则说明

  • :\d+::匹配以:开头和结尾,中间是一个或多个数字的字符串;
  • g:全局匹配标志,确保找到所有符合条件的内容;
  • (\d+):捕获组,专门提取中间的数字部分,方便在matchAll里直接获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:19