Замена шестнадцатеричного цветового кода в строке на цветной тег HTML - PullRequest
0 голосов
/ 23 апреля 2019

Учитывая строку, содержащую цветовые коды, я хочу сопоставить коды и заменить их на <span style='color: code'> с тем же цветным кодом, чтобы получить цветную строку HTML.

это то, что я уже пробовал:

function parseColors(str) {
  let reg = /#[0-9a-f]{6}/gi
  let arr = str.match(reg)
  if (arr) {
    arr.forEach(m => {
      str = str.replace(m, `<span style='color: ${m}'>`)
      str += "</span>"
    })
  }
  return str
}

console.log(parseColors(
  "#abcdefthe, #ff0000 red #abcdef fox"
))
// prints:
// <span style='color: <span style='color: #abcdef'>'>the, <span style='color: #ff0000'> red #abcdef fox</span></span></span>

проблема в том, что он дважды заменяет один и тот же цвет, поэтому сначала #abcdef будет тегом <span>, но затем он заменяет цвет в теге другим <span>

1 Ответ

2 голосов
/ 23 апреля 2019

Не самое лучшее решение, но оно правильно обрабатывает добавление конечного тега.

const HexPattern = /(#[0-9a-f]{6})(\s*[\w,]+\s*)/gi

function parseColors(str) {
  return str.replace(HexPattern, (s, g0, g1) => `<span style="color:${g0}">${g1}</span>`)
}

let html = parseColors("#abcdefthe, #ff0000 red #abcdef fox")

console.log(html)
document.body.innerHTML = html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...