-1

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

补充需求

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

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

Await 118
2017-07-17 提问

查看全部 5 个回答

6

已采纳
/**
 * @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' ]

推广链接