如何在一个字符串中找到并配对字母,以减少一个表达式?
假设我们有一个像string = "20hc+2a+2hc+9op+330o+10op"
这样的字符串,并且我们想找到数字后跟相同字母的那对。首先,我们应该执行split.('+')
,然后获得一个数组[....]
,然后我们需要在数字之后将每个字母配对,以得到如下所示的内容:(20hc + 2hc) (2a) (9op+10op) (330o)
最后,我们需要对匹配对的数字求和:
20+2 = 22hc
2 = 2a
9+10 = 19op
330 = 330o
获得最终结果:
22hc+2a+19op+330o
因此,我该如何解决这个问题,只要数字后的字母没有被排序就没关系,在这种情况下,我们可以使用正则表达式对它们进行
match
编码吗?或indexOf
? 最佳答案
我认为出于可读性考虑,只需使用indexOf对转换并构建一个哈希即可。例如:
const getPair = str => {
const numbers = '0123456789'
for (var i = 0; i < str.length; i++) {
if(numbers.indexOf(str.charAt(i)) < 0){ break }
}
return [str.slice(i), i === 0 ? 1 : parseInt(str.slice(0, i))]
}
//const eq = '20hc+2a+2hc+9op+330o+10op'
const eq = 'a+2ab+3b+4c+5bc'
const hash = eq.split('+')
.map(getPair)
.reduce((r, [key, val]) => {
r[key] = r[key] ? r[key] + val : val
return r
}, {})
const result = Object.entries(hash).map(([key, val]) => `${val}${key}`).join('+')
console.log(result)
关于javascript - 如何将像 “20hc+2a+2hc+9op”这样的字符串表达式简化为 “22hc+2a+9op”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54471316/