首页 > 解决方案 > JS 用新的随机 HEX 颜色替换每种 HEX 颜色

问题描述

最近我问过如何用随机的十六进制颜色替换一千个#FFF。解决方案是运行以​​下代码:

var fs = require('fs')
fs.readFile('stars.css', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  var result = data.replace(/#FFF/g, () => '#' + ("000000" + Math.random().toString(16).slice(2, 8).toUpperCase()).slice(-6));

  fs.writeFile('stars.css', result, 'utf8', function (err) {
     if (err) return console.log(err);
  });
});

我正在寻找一种方法来检测文件中的任何 HEX 颜色,并将其替换为新的随机 HEX 颜色。这是我尝试过的:

var result = data.replace(/^#[0-9A-F]{6}$/i.test('#AABBCC'), () => '#' + ("000000" + Math.random().toString(16).slice>

此外,("000000" + Math.random().toString(16).slice(2, 8).toUpperCase()).slice(-6)这是我获得 HEX 颜色的唯一方法,因为Math.floor(Math.random()*16777215).toString(16)方法在我的网页上引发错误

标签: javascriptregex

解决方案


替换data.replace(/^#[0-9A-F]{6}$/i.test('#AABBCC'), () => '#' + ("000000" + Math.random().toString(16).slice(2, 8).toUpperCase()).slice(-6));为:

data.replace(/#[0-9A-F]{3,6}/ig, () => `#${Math.floor(Math.random()*16777215).toString(16)}`);

我在您的正则表达式中添加了标志,并找到了一种更短的方法来从这里global生成随机颜色,除了删除不必要的和删除/ (匹配字符串开头).test^$


推荐阅读