list.js 1.1 KB

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