如题所示呢,大概需求就是将一串字符串中的指定内容截取,然后对截取的内容在做截取,小小的套娃一下,最后对得到的内容做相应的处理。类似于这样:
这种需求听起来很合(扯)理(蛋),首先首先要截取字符串长度并没有限制的,所以就不能去做固定位置截取,这里为了实现这个小小的需求,我借助了正则表达式及match方法相互配合。
思路:
- 因为要截取的内容都处在括号内,故首先将括号中的内容提取出来
- 然后在对截取内容做汉字和数字的分开提取
- 最后按需求对数字进行转换千克即可
步骤:
(1)取出括号中的内容使用正则惰性匹配 大概写法是 /\((.+?)\)/g
(2)取数字,所有数字或小数都会取出 /\d+(.\d+)?/g
(3)取汉字,这里需要借助汉字编码 /[\u4e00-\u9fa5]/g
代码:
因为我是Vue项目使用了filter 如下:
filters: {
toNumber(val) {
// 取出括号中的内容
let res = val.match(/\((.+?)\)/g)
let num = 0
if (res) {
res.forEach(ele => {
let numEle = ele.match(/\d+(.\d+)?/g).toString() //取出数字
let unitEle = ele.match(/[\u4e00-\u9fa5]/g).join("") // 取出汉字
switch (unitEle){
case '克':
num += (numEle * 1) / 1000
break;
case '千克':
num += numEle * 1
break;
case '吨':
num = num + (numEle * 1) * 1000
break;
case '斤':
num += (numEle * 1) * 0.5
break;
}
})
return num+'千克'
}else {
return res
}
}
},