list.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. 'use strict'
  2. let list = {
  3. comma(string) {
  4. return list.split(string, [','], true)
  5. },
  6. space(string) {
  7. let spaces = [' ', '\n', '\t']
  8. return list.split(string, spaces)
  9. },
  10. split(string, separators, last) {
  11. if (typeof string !== 'string') return []
  12. let array = []
  13. let current = ''
  14. let split = false
  15. let func = 0
  16. let inQuote = false
  17. let prevQuote = ''
  18. let escape = false
  19. for (let letter of string) {
  20. if (escape) {
  21. escape = false
  22. } else if (letter === '\\') {
  23. escape = true
  24. } else if (inQuote) {
  25. if (letter === prevQuote) {
  26. inQuote = false
  27. }
  28. } else if (letter === '"' || letter === "'") {
  29. inQuote = true
  30. prevQuote = letter
  31. } else if (letter === '(') {
  32. func += 1
  33. } else if (letter === ')') {
  34. if (func > 0) func -= 1
  35. } else if (func === 0) {
  36. if (separators.includes(letter)) split = true
  37. }
  38. if (split) {
  39. let value = current.trim()
  40. if (last || value !== '') array.push(value)
  41. current = ''
  42. split = false
  43. } else {
  44. current += letter
  45. }
  46. }
  47. let value = current.trim()
  48. if (last || value !== '') array.push(value)
  49. return array
  50. }
  51. }
  52. module.exports = list
  53. list.default = list