【问题标题】:RegExp Javascript HEX Colors Light and DarkRegExp Javascript HEX 颜色浅色和深色
【发布时间】:2014-07-06 00:22:24
【问题描述】:

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

FFFFFF 会变成 EFEFEF

FEFEFE 会变成 EEEEEE

【问题讨论】:

    标签: javascript regex colors hex


    【解决方案1】:

    我猜想执行此操作的函数将由诸如 onClick 之类的事件或其他事件触发。 为什么不简单地做一个这样的功能(伪代码)?

    if (colour == FFFFFF)
    colour = EFEFEF;
    else if (colour == FEFEFE)
    colour = EEEEEE;
    

    【讨论】:

    • 它需要是动态的。我不知道会选择什么颜色,但我永远不会希望每个十六进制块都以 F 开头。未经测试的想法是它会通过减少允许的 RGB 数量来限制颜色的亮度。
    【解决方案2】:

    你可以用这个:

    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的原因。

    【讨论】:

    • 是的,完美。我的代码完全走错了方向。谢谢。
    • dadsaF0F0F0F0F0F0F0F0F0F0asddsa
    • 在 AFFAAA 上失败。第二个模式将匹配,但它将是第一个匹配,因此 $1 得到错误的值。至少我认为这就是它失败的原因。
    • @user3642891: 你想用AFFAAA 获得什么?
    • 好的,我想我在最初的问题中假设了一些事情。基本上我会收到一个十六进制颜色代码。它们是 6 位十六进制数字,但我用 6 个字符的字符串计算它们。我只想将其他所有 F 更改为 E。所以 FEFEFE 将变为 EEEEEE,AFFAAA 将变为 AFEAAA。我只关心 3 组两位十六进制数字中的第一个 F 。我希望这更清楚。 :(
    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2021-11-29
    • 2017-06-26
    相关资源
    最近更新 更多