【问题标题】:Regex- match 3 or 6 of type正则表达式 - 匹配类型 3 或 6
【发布时间】:2016-05-20 22:46:27
【问题描述】:

我正在编写一个需要颜色处理的应用程序,我想知道用户何时输入了有效的十六进制值。这包括“#ffffff”和“#fff”,但不包括介于两者之间的,如 4 或 5 Fs。我的问题是,我可以编写一个正则表达式来确定一个字符是否存在一定次数或另一个确切的次数?

我尝试的是改变:

/#(\d|\w){3}{6}/

正则表达式:

/#(\d|\w){3|6}/

显然这不起作用。我意识到我可以写:

/(#(\d|\w){3})|(#(\d|\w){6})/

不过我希望有更好看的东西。

【问题讨论】:

  • (\d|\w) 将匹配很多不是有效的十六进制数字的字符。试试[\da-f](或[\dA-Fa-f])。
  • 请注意,anubhava 和 biffen 的建议是不可扩展的。您使用/(#(\d|\w){3})|(#(\d|\w){6})/ 的交替(正则表达式不好,但想法是正确的)是。
  • @WiktorStribiżew 你能详细说明一下吗?
  • @Biffen:您不能使用您的方法来精确匹配 2 位或 5 位或 14 位。
  • @WiktorStribiżew 啊,我明白你的意思了。

标签: javascript regex hex


【解决方案1】:

我能想到的最短的:

/#([\da-f]{3}){1,2}/i

# 后跟一组或两组三个十六进制数字。

【讨论】:

    【解决方案2】:

    你可以使用这个正则表达式:

    /#[a-f\d]{3}(?:[a-f\d]{3})?\b/i
    

    这将允许#<3 hex-digits>#<6 hex-digits> 输入。 \b 最后是单词边界。

    RegEx Demo

    【讨论】:

    • 您好,问题发布后 15 秒? 不可能
    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多