string.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. const reLine = /^/mg
  7. export function indentString(str: string, count: number, indent: string) {
  8. return count === 0 ? str : str.replace(reLine, indent.repeat(count))
  9. }
  10. /** Add space between camelCase text. */
  11. export function splitCamelCase(str: string) {
  12. return str.replace(/([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g, '$1 $2')
  13. }
  14. /** Split camelCase text and capitalize. */
  15. export function camelCaseToWords(str: string) {
  16. return capitalize(splitCamelCase(str))
  17. }
  18. export const lowerCase = (str: string) => str.toLowerCase()
  19. export const upperCase = (str: string) => str.toUpperCase()
  20. /** Uppercase the first character of each word. */
  21. export function capitalize(str: string) {
  22. return str.toLowerCase().replace(/^\w|\s\w/g, upperCase);
  23. }
  24. export function splitSnakeCase(str: string) {
  25. return str.replace(/_/g, ' ')
  26. }
  27. export function snakeCaseToWords(str: string) {
  28. return capitalize(splitSnakeCase(str))
  29. }
  30. export function stringToWords(str: string) {
  31. return capitalize(splitCamelCase(splitSnakeCase(str)))
  32. }
  33. export function substringStartsWith(str: string, start: number, end: number, target: string) {
  34. let len = target.length;
  35. if (len > end - start) return false;
  36. for (let i = 0; i < len; i++) {
  37. if (str.charCodeAt(start + i) !== target.charCodeAt(i)) return false;
  38. }
  39. return true;
  40. }
  41. export function interpolate(str: string, params: { [k: string]: any }) {
  42. const names = Object.keys(params);
  43. const values = Object.values(params);
  44. return new Function(...names, `return \`${str}\`;`)(...values);
  45. }
  46. export function trimChar(str: string, char: string) {
  47. let start = 0;
  48. let end = str.length;
  49. while (start < end && str[start] === char) ++start;
  50. while (end > start && str[end - 1] === char) --end;
  51. return (start > 0 || end < str.length) ? str.substring(start, end) : str;
  52. }
  53. export function trimCharStart(str: string, char: string) {
  54. let start = 0;
  55. const end = str.length;
  56. while (start < end && str[start] === char) ++start;
  57. return (start > 0) ? str.substring(start, end) : str;
  58. }
  59. export function trimCharEnd(str: string, char: string) {
  60. let end = str.length;
  61. while (end > 0 && str[end - 1] === char) --end;
  62. return (end < str.length) ? str.substring(0, end) : str;
  63. }
  64. /** Simple function to strip tags from a string */
  65. export function stripTags(str: string) {
  66. return str.replace(/<\/?[^>]+>/g, '')
  67. }