list.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. if (current !== '') array.push(current.trim())
  40. current = ''
  41. split = false
  42. } else {
  43. current += letter
  44. }
  45. }
  46. if (last || current !== '') array.push(current.trim())
  47. return array
  48. }
  49. }
  50. module.exports = list
  51. list.default = list