【问题标题】:vimscript rgb/rgba regexvimscript rgb/rgba 正则表达式
【发布时间】:2017-10-21 06:44:58
【问题描述】:

我正在尝试学习 vimscript,所以我想到了在 vim 中制作 rgb(a) 十六进制颜色转换器。我目前正在尝试让它为css工作,我已经制作了解析颜色的部分(返回“#123456”“rgb(120,120,120)”等)并确定它是否是十六进制(以“#”开头),现在我正在尝试检测正确的 rgb/rgba 颜色。

问题是我无法找出它的正则表达式,我在https://regex101.com/做了一个

我使用^rgba?\(\d+,\d+,\d+\) 来匹配 rgb 和 rgba 括号内的数字(带有 gm 标志)。在网站上它工作正常,我用它来搜索:

rgb(10,10,10)
rgba(1,150,20)
rgba(1,2,3)
rgb(12,34,56)
rgba(1,1,1)
rgba(1,150,20)
rgb
rgba
rgb()
rgba()

经过一些谷歌搜索后,我发现 vim 使用自己的语法,我在 vim 文档中搜索并将模式更改为 ^rgba\?\(\d\+,\d\+,\d\+\)。但仍然没有运气。

示例 vimscript 代码:

let color="rgba(10,10,10)"
let s:match = match(color, "^rgba\?\(\d\+,\d\+,\d\+\)")
echom s:match

有人可以指出我正确的方向吗?我有什么明显的遗漏吗?

更新

我无法使用空格(“\s”和“”)似乎不起作用,所以我只是用let color = substitute(color, '\s', '', 'g') 删除了所有空格。

无论如何,我正在使用 Dan Lowe 的建议:\v^rgba?\(\d+,\d+,\d+\)

【问题讨论】:

    标签: regex vim colors


    【解决方案1】:

    这应该可行:

    match(color, '\v^rgba?\(\d+,\d+,\d+\)')
    

    为这些东西指定匹配模式总是一个好主意,因为否则行为可能会受到您是否使用魔术模式的影响。

    这里我使用了\v 来指定“非常神奇”的模式。即定义为:

    使用\v 意味着在它之后的所有ASCII字符除了 0-9a-zA-Z_有特殊含义。 “很神奇”

    它更接近于您在其他语言(Python、Perl、Ruby 等)中可能使用的内容。请注意,您几乎不需要反斜杠引用,这看起来更像是来自任何通用语言的正则表达式。

    它还使 regex101 等工具在这种情况下更加有用。您可能注意到 regex101 有几种风格,但 vim 不是其中之一。如果你使用非常神奇的模式,pcre 风格将(大部分)适用于 vim 正则表达式。

    【讨论】:

    • 太好了,成功了!我读过“非常神奇”的模式,但有人说它可能表现得很奇怪。非常感谢:)
    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2012-07-03
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多