如何在一个字符串中找到并配对字母,以减少一个表达式?

假设我们有一个像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/

10-10 23:23