Path: csiph.com!weretis.net!feeder8.news.weretis.net!news.mb-net.net!open-news-network.org!.POSTED.178.197.212.81!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: comp.lang.javascript Subject: Re: Help with regexp Date: Sat, 07 Aug 2021 21:56:28 +0200 Organization: PointedEars Software (PES) Lines: 54 Message-ID: <3136550.aeNJFYEL58@PointedEars.de> References: Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit Injection-Info: gwaiyur.mb-net.net; posting-host="178.197.212.81"; logging-data="14850"; mail-complaints-to="abuse@open-news-network.org" User-Agent: KNode/4.14.10 Cancel-Lock: sha1:MGEInl1a6+/TqD4IeWCOEZQA7eM= X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. I have a string that looks like this > > let str = 'linear-gradient(90deg, #ff0000 50%, #00ff00 100%)" > > I need to convert the hex values to rgba so I've written a function > > const convertHex2Rgba = (hex, alpha = 1) => { > ... > return `rgba(${r},${g},${b},${alpha})`; > }; > > I'm stuck trying to write a regexp that replaces the hex values (that > may have either 3 or 6 characters - plus the #) with the value returned > from convertHex2Rgba. > > This (one of my many failed attempts): > > str.replace(/#[0-9a-fA-F]/, convertHex2Rgba('$1')); > > does nothing. Of course not. 1. You are not using the return value of the “replace” method. 2. You are not passing your function a proper value for the formal parameter “hex”, but the string value '$1' instead. ('$1' is only expanded with the first captured subpattern if the entire argument is a string value.) 3. You are not matching that which you intend to match. (You are only matching a single hexadecimal digit.) This should work: const generateHex2Rgba = ((alpha = 1) => ((hex, red, green, blue, count) => { let [r, g, b] = [red, green, blue].map(s => parseInt(s, 16)); return `rgba(${r},${g},${b},${alpha})`; })); str = str.replace( /#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/gi, generateHex2Rgba() ); Why you want to do that remains a mystery, though. -- PointedEars FAQ: | | Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.