javascript字符串提取数字

需求:要把一串字符拆分成有用的信息,字符串的格式有两种情形
1、abc10
2、123abc100
字符与数字长度不固定,提取后的结果应为:
1、['abc','10']
2、['123','abc','100']

补充需求

输出结果
1、['abc','10']
2、['abc','123','100']
这样使用的时候更方便。

当abc为某个特定的字符时,字符前面的数字与本身合并一起。如:1ab23=>['1ab','23']

阅读 3.8k
评论
    5 个回答
    • 9k
    /**
     * @param {string} str
     * @param {string|string[]} [keywords]
     * @returns {string}
     */
    function match (str, keywords) {
      str = String(str)
      var ks = ''
      if (Array.isArray(keywords)) {
        ks = keywords.map(k => '\\d+' + k).join('|') + '|'
      } else if (typeof keywords === 'string') {
        ks = `\\d+${keywords}|`
      }
      var checker = new RegExp(`${ks}\\d+|\\D+`, 'g')
      return str.match(checker).sort((a, b) => !isNaN(a * 1) && isNaN(b * 1) ? 1 : -1)
    }
    
    console.log(match('123abc100')) // [ 'abc', '123', '100' ]
    console.log(match('1ab23', 'ab')) // [ '1ab', '23' ]
    console.log(match('ab23', 'ab')) // [ 'ab', '23' ]
    console.log(match('1ab23cd244gh3', ['ab', 'cd'])) // [ '1ab', '23cd', 'gh', '244', '3' ]
      相似问题
      推荐文章