заменить процент линейного градиента с помощью регулярного выражения

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я впервые использую регулярное выражение, я хотел бы заменить второй процент rgb с 10% на 30%. Например, rgb(251, 188, 5) 10% для rgb(251, 188, 5) 30%

Я пытался выполнить поиск в Интернете, но не смог получить то, что мне действительно нужно. ниже приведен мой тестовый код, я могу получить только rgb(251, 188, 5) , как я могу включить 10% для меня, чтобы заменить его? или прямой доступ к 10% и заменить его на 30%?

перед изменением:

 linear-gradient(rgb(251, 188, 5), rgb(251, 188, 5) 10%, rgb(223, 223, 223) 0%, rgb(223, 223, 223) 100%)
 

ожидаемый результат:

 linear-gradient(rgb(251, 188, 5), rgb(251, 188, 5) 30%, rgb(223, 223, 223) 0%, rgb(223, 223, 223) 100%)
 
 const r = "linear-gradient(rgb(251, 188, 5), rgb(251, 188, 5) 10%, rgb(223, 223, 223) 0%, rgb(223, 223, 223) 100%)".replace(/(?<=rgb.*?)rgb(.*?)/, '30%')
console.log(r) 

Ответ №1:

Вы можете использовать

 .replace(/^(.*?brgb.*?brgb([^()]*)s*)d (?:.d )?%/, '$130%')
 

Смотрите демонстрацию регулярных выражений.

Подробные сведения

  • ^ — начало строки
  • (.*?brgb.*?brgb([^()]*)s*) — Группа 1 ( $1 ):
    • .*? — любые нулевые или более символов, отличных от символов разрыва строки, как можно меньше
    • brgb.*? — граница слова rgb и любые нулевые или более символов, отличных от символов разрыва строки, как можно меньше
    • brgb( rgb целое слово и ( символ
    • [^()]* — ноль или более символов, отличных от ( и )
    • ) ) символ
    • s* — ноль или более пробелов
  • d (?:.d )? — одна или несколько цифр, а затем необязательная последовательность из a . и одной или нескольких цифр (не обязательно для текущего примера, но полезно иметь, если у вас есть числа с дробными частями)
  • % — (на самом деле, это здесь просто для того, чтобы убедиться, что у нас есть процентное значение, оно может и не понадобиться) — % символ.

Демонстрация JavaScript:

 console.log(
  "linear-gradient(rgb(251, 188, 5), rgb(251, 188, 5) 10%, rgb(223, 223, 223) 0%, rgb(223, 223, 223) 100%)".replace(/^(.*?brgb.*?brgb([^()]*)s*)d (?:.d )?%/, '$130%')
)