如何通过.innerText提取<li>中的连续数字并转为整数?
解决方案
你的问题出在正则表达式/\d/g会匹配每一个单独的数字字符,所以返回单个数字组成的数组。要提取连续的数字(比如25),可以用以下几种简便高效的方法:
方法1:匹配连续数字(推荐)
修改正则为/\d+/,匹配一个或多个连续的数字,再转换为整数:
const itemText = item.parentElement.innerText; // 匹配第一个连续数字序列,无匹配时返回null const weightMatch = itemText.match(/\d+/); // 转成整数,默认值0避免报错 const itemWeight = weightMatch ? parseInt(weightMatch[0], 10) : 0;
如果需要支持浮点数(比如25.5kg),可以把正则改成/\d+\.?\d*/,并使用parseFloat替代parseInt。
方法2:拼接现有数组结果(仅适合无分散数字的场景)
如果坚持用你原来的匹配逻辑,可以把数组元素拼接成字符串后转数字:
const itemText = item.parentElement.innerText; const itemWeightChars = itemText.match(/\d/g) || []; const itemWeight = Number(itemWeightChars.join(''));
⚠️ 注意:这种方式会把文本中所有分散的数字拼在一起,比如"2kg 5"会得到25,如果你的列表项存在多个数字,不推荐用这种方法。
方法3:精准匹配固定格式(最优,如果格式固定)
如果你的列表项格式固定为"xxx - Xkg",可以用更精准的正则匹配破折号后、kg前的数字,完全避免其他数字干扰:
const itemText = item.parentElement.innerText; // 精准匹配"- 25kg"中的数字部分 const weightMatch = itemText.match(/- (\d+)kg/); const itemWeight = weightMatch ? parseInt(weightMatch[1], 10) : 0;
内容的提问来源于stack exchange,提问作者Laurens
相关产品推荐
相关产品推荐

