4 个回答

正则替换

// 这里用字符串演示,实际里就是input.value
'1,2,3-10'.replace(/(\d+)[-~](\d+)/g,(_,$1,$2) => {
    const start = +$1;
    const end = +$2;
    if(start>end) return $1;
    return Array.from({length: end-start+1}, (_,i) => start+i).join(',')
})
 // 题目中没有其他干扰条件,按用户正常输入考虑:
 const str = '3-10'
  function test(str) {
    const input = str.split('-')
    const startIndex = parseInt(input[0], 10)
    const endIndex = parseInt(input[1], 10)
    return new Array(endIndex - startIndex + 1).fill(0).map((v, i) => startIndex + i)
  }

  console.log(test(str));
// => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(demo('1,2,3-10')) 

function demo (data) {
  const list = data.split(',')
  const result = list.map(function (item) {
    item = item.split('-')
    if(item.length === 1) {
      return item
    } else {        
      const arr = []
      for(let a = item[0]*1; a<=item[1]*1; a++) {
        arr.push(a)
      }
      return arr
    }
  })
  return result.flat().map(c => c*1)
}
let str = '1,2,3-10'
getData(str)

function getData(str) {
    const tail = str.split('-')
    const min = str.indexOf(',') !== -1 && str.split(',')[0] || tail[0]
    const max = tail[1]
    let res = ''
    for (let i = Number(min); i<=Number(max); i++) {
        res += i + (i<max && ',')
    }
    return res
}
推荐问题