한 가지 문제를 해결할 수 없습니다.
어떤 곳에 16 진 코드가있는 문자열이 있고 코드는 많을 수 있습니다. 변경된 코드로 문자열을 반환 할 수있는 함수를 작성해야합니다. 내가하려고했던 것 :
function test(i,color){
let str = "Lorem ipsum #1385ff dolor sit amet, #1385ff consectetur adipisicing #1385ff elit. #333 Neque , est, voluptatum,#333";
str = str.replace(str.match(/#[0-9a-f]{6}|#[0-9a-f]{3}/gi)[i],color)
return str
}
console.log(test(2,"#000"))
내가 기대했던 것 :
Lorem ipsum #1385ff dolor sit amet, #1385ff consectetur adipisicing #000 elit. #1385ff Neque quibusdam, est, voluptatum,#333333 aperia
내가 얻은 것 :
Lorem ipsum #000 dolor sit amet, #1385ff consectetur adipisicing #1385ff elit. #1385ff Neque , est, voluptatum,#333333
나는 당신의 도움에 매우 감사 할 것입니다 :)
교체 기능을 사용하여 교체하려는 위치를 계산할 수 있습니다.
function test(i,color){
let str = "Lorem ipsum #1385ff dolor sit amet, #1385ff consectetur adipisicing #1385ff elit. #333 Neque , est, voluptatum,#333";
var j = 0;
str = str.replace(/#[0-9a-f]{6}|#[0-9a-f]{3}/gi,function(x){return j++!==i? x : color})
return str
}
console.log(test(2,"#000"))
대체 기능을 사용하지 않는 다른 버전. 패턴 i
시간 과 일치 할 때마다 새 RegExp를 빌드하고 , 해당 텍스트를 모두 캡처하고, 해당 텍스트를 다시 삽입하고, i
일치하는 항목을 다음으로 바꿉니다.color
function test(i,color){
let str = "Lorem ipsum #1385ff dolor sit amet, #1385ff consectetur adipisicing #1385ff elit. #333 Neque , est, voluptatum,#333";
str = str.replace(new RegExp(`((?:.*?#[0-9a-f]{6}|#[0-9a-f]{3}){${i}}.*?)(?:#[0-9a-f]{6}|#[0-9a-f]{3})`,'i'),`$1${color}`)
return str
}
console.log(test(2,"#000"))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다