RegExp Javascript十六进制颜色亮和暗

RegExp Javascript十六进制颜色亮和暗,javascript,regex,colors,hex,Javascript,Regex,Colors,Hex,我想用一个正则表达式将构成十六进制颜色的三个十六进制集合中的第一个F替换为E FFFFFF将变成EFEF FEFEFE将变成EEEEEE我猜,这样做的函数将由onClick之类的事件触发。 为什么不简单地执行这样的函数(伪代码) 您可以使用以下选项: str = str.replace(/F(?=[A-F0-9](?:[A-F0-9]{2}){0,2}$)/g, 'E'); 图案详情: F (?= # lookahead assertion: means "followed b

我想用一个正则表达式将构成十六进制颜色的三个十六进制集合中的第一个F替换为E

FFFFFF将变成EFEF


FEFEFE将变成EEEEEE

我猜,这样做的函数将由onClick之类的事件触发。 为什么不简单地执行这样的函数(伪代码)

您可以使用以下选项:

str = str.replace(/F(?=[A-F0-9](?:[A-F0-9]{2}){0,2}$)/g, 'E');
图案详情:

F
(?=         # lookahead assertion: means "followed by"
            # the trick is to use the relative position to the end of the string
    [A-F0-9]  # an hexadecimal character    
    (?:[A-F0-9]{2}){0,2} # an even number of hexadecimal characters
$                        # until the end
)           # close the lookahead assertion.

请注意,前瞻中的所有内容仅被选中,而不是匹配结果的一部分。这就是替换字符串仅为
E

的原因,它需要是动态的。我不知道会选择什么颜色,但我永远不会希望每个六边形块都以F开头。未经测试的想法是,它会通过减少RGB允许的数量来限制颜色的亮度。是的,效果非常好。我的代码完全走错了方向。谢谢。
dadsaf0f0asddsa
在AFFAAA上失败。第二个模式将匹配,但它将是第一个匹配,因此$1获得错误的值。至少我认为这就是它失败的原因。@user3642891:那么你想通过
affaa
获得什么呢?好吧,我想我在最初的问题中假设了一些东西。基本上我会收到一个十六进制颜色代码。它们是6位十六进制数,但我用6个字符的字符串计算它们。我只想把每一个F-in改成E,这样FEFEFE会变成eeeee,AFFAAA会变成AFEAAA。我只关心3组两位数十六进制数中的第一个F。我希望这更清楚(
F
(?=         # lookahead assertion: means "followed by"
            # the trick is to use the relative position to the end of the string
    [A-F0-9]  # an hexadecimal character    
    (?:[A-F0-9]{2}){0,2} # an even number of hexadecimal characters
$                        # until the end
)           # close the lookahead assertion.