js颜色的单词名称字符串转为rgb颜色值

将js单词名称如red,green,blue转为rgb颜色值, 暂时没找到什么特别的方法。网上找到了颜色名称与rgb值的对应表,然后构造成map获取rgb值。
代码放在: https://github.com/lxmghct/my-vue-components
src/utils/color_convert.js下。
完整代码如下:

const name2rgbMap = {
  'aliceblue': 'rgb(240,248,255)',
  'antiquewhite': 'rgb(250,235,215)',
  'aqua': 'rgb(0,255,255)',
  'auqamarin': 'rgb(127,255,170)',
  'azure': 'rgb(240,255,255)',
  'beige': 'rgb(107,142,35)',
  'bisque': 'rgb(255,228,196)',
  'black': 'rgb(0,0,0)',
  'blanchedalmond': 'rgb(255,235,205)',
  'blue': 'rgb(0,0,255)',
  'blueviolet': 'rgb(138,43,226)',
  'brown': 'rgb(165,42,42)',
  'brulywood': 'rgb(222,184,135)',
  'cadetblue': 'rgb(95,158,160)',
  'chartreuse': 'rgb(127,255,0)',
  'chocolate': 'rgb(210,105,30)',
  'coral': 'rgb(255,127,80)',
  'cornflowerblue': 'rgb(100,149,237)',
  'cornislk': 'rgb(255,248,220)',
  'crimson': 'rgb(220,20,60)',
  'cyan': 'rgb(0,255,255)',
  'darkblue': 'rgb(0,0,139)',
  'darkcyan': 'rgb(0,139,139)',
  'darkgray': 'rgb(169,169,169)',
  'darkgreen': 'rgb(0,100,0)',
  'darkkhaki': 'rgb(189,183,107)',
  'darkmagenta': 'rgb(139,0,139)',
  'darkorange': 'rgb(255,140,0)',
  'darkorchid': 'rgb(153,50,204)',
  'darkred': 'rgb(139,0,0)',
  'darksalmon': 'rgb(233,150,122)',
  'darkseagreen': 'rgb(143,188,143)',
  'darkslateblue': 'rgb(72,61,139)',
  'darkslategray': 'rgb(47,79,79)',
  'darkturquoise': 'rgb(0,206,209)',
  'darkvoilet': 'rgb(148,0,211)',
  'deeppink': 'rgb(255,20,147)',
  'deepskyblue': 'rgb(0,191,255)',
  'dimgray': 'rgb(105,105,105)',
  'doderblue': 'rgb(30,144,255)',
  'firebrick': 'rgb(178,34,34)',
  'floralwhite': 'rgb(255,250,240)',
  'forestgreen': 'rgb(34,139,34)',
  'fuchsia': 'rgb(255,0,255)',
  'gainsboro': 'rgb(220,220,220)',
  'ghostwhite': 'rgb(248,248,255)',
  'gold': 'rgb(255,215,0)',
  'goldenrod': 'rgb(218,165,32)',
  'gray': 'rgb(128,128,128)',
  'green': 'rgb(0,128,0)',
  'greenyellow': 'rgb(173,255,47)',
  'honeydew': 'rgb(240,255,240)',
  'hotpink': 'rgb(255,105,180)',
  'indianred': 'rgb(205,92,92)',
  'indigo': 'rgb(75,0,130)',
  'ivory': 'rgb(255,255,240)',
  'khaki': 'rgb(240,230,140)',
  'lavender': 'rgb(230,230,250)',
  'lavenderblush': 'rgb(255,240,245)',
  'lawngreen': 'rgb(124,252,0)',
  'lemonchiffon': 'rgb(255,250,205)',
  'lightblue': 'rgb(173,216,230)',
  'lightcoral': 'rgb(240,128,128)',
  'lightcyan': 'rgb(225,255,255)',
  'lightgoldenrodyellow': 'rgb(250,250,210)',
  'lightgreen': 'rgb(144,238,144)',
  'lightgrey': 'rgb(211,211,211)',
  'lightpink': 'rgb(255,182,193)',
  'lightsalmon': 'rgb(255,160,122)',
  'lightseagreen': 'rgb(32,178,170)',
  'lightskyblue': 'rgb(135,206,250)',
  'lightslategray': 'rgb(119,136,153)',
  'lightsteelblue': 'rgb(176,196,222)',
  'lightyellow': 'rgb(255,255,224)',
  'lime': 'rgb(0,255,0)',
  'limegreen': 'rgb(50,205,50)',
  'linen': 'rgb(250,240,230)',
  'magenta': 'rgb(255,0,255)',
  'maroon': 'rgb(128,0,0)',
  'mediumaquamarine': 'rgb(0,250,154)',
  'mediumblue': 'rgb(0,0,205)',
  'mediumorchid': 'rgb(186,85,211)',
  'mediumpurple': 'rgb(147,112,219)',
  'mediumslateblue': 'rgb(123,104,238)',
  'mediumspringgreen': 'rgb(245,255,250)',
  'mediumturquoise': 'rgb(72,209,204)',
  'mediumvioletred': 'rgb(199,21,133)',
  'midnightblue': 'rgb(25,25,112)',
  'mintcream': 'rgb(0,255,127)',
  'mistyrose': 'rgb(255,228,225)',
  'moccasin': 'rgb(255,228,181)',
  'navajowhite': 'rgb(255,222,173)',
  'navy': 'rgb(0,0,128)',
  'oldlace': 'rgb(253,245,230)',
  'olive': 'rgb(128,128,0)',
  'olivedrab': 'rgb(85,107,47)',
  'orange': 'rgb(255,165,0)',
  'orangered': 'rgb(255,69,0)',
  'orchid': 'rgb(218,112,214)',
  'palegodenrod': 'rgb(238,232,170)',
  'palegreen': 'rgb(152,251,152)',
  'paleturquoise': 'rgb(175,238,238)',
  'palevioletred': 'rgb(219,112,147)',
  'papayawhip': 'rgb(255,239,213)',
  'peachpuff': 'rgb(255,218,185)',
  'peru': 'rgb(205,133,63)',
  'pink': 'rgb(255,192,203)',
  'plum': 'rgb(221,160,221)',
  'powderblue': 'rgb(176,224,230)',
  'purple': 'rgb(128,0,128)',
  'red': 'rgb(255,0,0)',
  'rosybrown': 'rgb(188,143,143)',
  'royalblue': 'rgb(65,105,225)',
  'saddlebrown': 'rgb(139,69,19)',
  'salmon': 'rgb(250,128,114)',
  'sandybrown': 'rgb(244,164,96)',
  'seagreen': 'rgb(46,139,87)',
  'seashell': 'rgb(255,245,238)',
  'sienna': 'rgb(160,82,45)',
  'silver': 'rgb(192,192,192)',
  'skyblue': 'rgb(135,206,235)',
  'slateblue': 'rgb(106,90,205)',
  'slategray': 'rgb(112,128,144)',
  'snow': 'rgb(255,250,250)',
  'springgreen': 'rgb(60,179,113)',
  'steelblue': 'rgb(70,130,180)',
  'tan': 'rgb(210,180,140)',
  'teal': 'rgb(0,128,128)',
  'thistle': 'rgb(216,191,216)',
  'tomato': 'rgb(255,99,71)',
  'turquoise': 'rgb(64,224,208)',
  'violet': 'rgb(238,130,238)',
  'wheat': 'rgb(245,222,179)',
  'white': 'rgb(255,255,255)',
  'whitesmoke': 'rgb(245,245,245)',
  'yellow': 'rgb(255,255,0)'
}
const name2hexrgbMap = {
  'aliceblue': '#f0f8ff',
  'antiquewhite': '#faebd7',
  'aqua': '#00ffff',
  'auqamarin': '#7fffaa',
  'azure': '#f0ffff',
  'beige': '#6b8e23',
  'bisque': '#ffe4c4',
  'black': '#000000',
  'blanchedalmond': '#ffebcd',
  'blue': '#0000ff',
  'blueviolet': '#8a2be2',
  'brown': '#a52a2a',
  'brulywood': '#deb887',
  'cadetblue': '#5f9ea0',
  'chartreuse': '#7fff00',
  'chocolate': '#d2691e',
  'coral': '#ff7f50',
  'cornflowerblue': '#6495ed',
  'cornislk': '#fff8dc',
  'crimson': '#dc143c',
  'cyan': '#00ffff',
  'darkblue': '#00008b',
  'darkcyan': '#008b8b',
  'darkgray': '#a9a9a9',
  'darkgreen': '#006400',
  'darkkhaki': '#bdb76b',
  'darkmagenta': '#8b008b',
  'darkorange': '#ff8c00',
  'darkorchid': '#9932cc',
  'darkred': '#8b0000',
  'darksalmon': '#e9967a',
  'darkseagreen': '#8fbc8f',
  'darkslateblue': '#483d8b',
  'darkslategray': '#2f4f4f',
  'darkturquoise': '#00ced1',
  'darkvoilet': '#9400d3',
  'deeppink': '#ff1493',
  'deepskyblue': '#00bfff',
  'dimgray': '#696969',
  'doderblue': '#1e90ff',
  'firebrick': '#b22222',
  'floralwhite': '#fffaf0',
  'forestgreen': '#228b22',
  'fuchsia': '#ff00ff',
  'gainsboro': '#dcdcdc',
  'ghostwhite': '#f8f8ff',
  'gold': '#ffd700',
  'goldenrod': '#daa520',
  'gray': '#808080',
  'green': '#008000',
  'greenyellow': '#adff2f',
  'honeydew': '#f0fff0',
  'hotpink': '#ff69b4',
  'indianred': '#cd5c5c',
  'indigo': '#4b0082',
  'ivory': '#fffff0',
  'khaki': '#f0e68c',
  'lavender': '#e6e6fa',
  'lavenderblush': '#fff0f5',
  'lawngreen': '#7cfc00',
  'lemonchiffon': '#fffacd',
  'lightblue': '#add8e6',
  'lightcoral': '#f08080',
  'lightcyan': '#e1ffff',
  'lightgoldenrodyellow': '#fafad2',
  'lightgreen': '#90ee90',
  'lightgrey': '#d3d3d3',
  'lightpink': '#ffb6c1',
  'lightsalmon': '#ffa07a',
  'lightseagreen': '#20b2aa',
  'lightskyblue': '#87cefa',
  'lightslategray': '#778899',
  'lightsteelblue': '#b0c4de',
  'lightyellow': '#ffffe0',
  'lime': '#00ff00',
  'limegreen': '#32cd32',
  'linen': '#faf0e6',
  'magenta': '#ff00ff',
  'maroon': '#800000',
  'mediumaquamarine': '#00fa9a',
  'mediumblue': '#0000cd',
  'mediumorchid': '#ba55d3',
  'mediumpurple': '#9370db',
  'mediumslateblue': '#7b68ee',
  'mediumspringgreen': '#f5fffa',
  'mediumturquoise': '#48d1cc',
  'mediumvioletred': '#c71585',
  'midnightblue': '#191970',
  'mintcream': '#00ff7f',
  'mistyrose': '#ffe4e1',
  'moccasin': '#ffe4b5',
  'navajowhite': '#ffdead',
  'navy': '#000080',
  'oldlace': '#fdf5e6',
  'olive': '#808000',
  'olivedrab': '#556b2f',
  'orange': '#ffa500',
  'orangered': '#ff4500',
  'orchid': '#da70d6',
  'palegodenrod': '#eee8aa',
  'palegreen': '#98fb98',
  'paleturquoise': '#afeeee',
  'palevioletred': '#db7093',
  'papayawhip': '#ffefd5',
  'peachpuff': '#ffdab9',
  'peru': '#cd853f',
  'pink': '#ffc0cb',
  'plum': '#dda0dd',
  'powderblue': '#b0e0e6',
  'purple': '#800080',
  'red': '#ff0000',
  'rosybrown': '#bc8f8f',
  'royalblue': '#4169e1',
  'saddlebrown': '#8b4513',
  'salmon': '#fa8072',
  'sandybrown': '#f4a460',
  'seagreen': '#2e8b57',
  'seashell': '#fff5ee',
  'sienna': '#a0522d',
  'silver': '#c0c0c0',
  'skyblue': '#87ceeb',
  'slateblue': '#6a5acd',
  'slategray': '#708090',
  'snow': '#fffafa',
  'springgreen': '#3cb371',
  'steelblue': '#4682b4',
  'tan': '#d2b48c',
  'teal': '#008080',
  'thistle': '#d8bfd8',
  'tomato': '#ff6347',
  'turquoise': '#40e0d0',
  'violet': '#ee82ee',
  'wheat': '#f5deb3',
  'white': '#ffffff',
  'whitesmoke': '#f5f5f5',
  'yellow': '#ffff00'
}

const rgbReg = /\s*rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)\s*/
const rgbaReg = /\s*rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)\s*/
const hexReg = /\s*#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\s*/

export function getRgbColor(colorString) {
  if (rgbReg.test(colorString) || rgbaReg.test(colorString)) {
    return colorString.replace(/\s*/g, '')
  }
  if (hexReg.test(colorString)) {
    let hex = colorString.replace(/\s*/g, '')
    if (hex.length === 4) {
      hex = hex.replace(/#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/g, '#$1$1$2$2$3$3')
    }
    hex = hex.replace('#', '0x')
    return `rgb(${[(hex & 0xff0000) >> 16, (hex & 0xff00) >> 8, hex & 0xff].join(',')})`
  }
  const color = name2rgbMap[colorString.toLowerCase()]
  if (color) {
    return color
  }
  return null
}

export function getHexColor(colorString) {
  if (hexReg.test(colorString)) {
    return colorString.replace(/\s*/g, '')
  }
  if (rgbReg.test(colorString) || rgbaReg.test(colorString)) {
    colorString = colorString.replace(/\s*/g, '')
    let color = colorString.match(rgbReg) || colorString.match(rgbaReg)
    // color[0] is the whole string, [1, 2, 3] is the rgb
    let r = parseInt(color[1]) & 0xff
    let g = parseInt(color[2]) & 0xff
    let b = parseInt(color[3]) & 0xff
    const format = (num) => {
      const str = num.toString(16)
      return str.length === 1 ? `0${str}` : str
    }
    return `#${[r, g, b].map(format).join('')}`
  }
  const color = name2hexrgbMap[colorString.toLowerCase()]
  if (color) {
    return getHexColor(color)
  }
  return null
}

export default {
  getRgbColor,
  getHexColor
}