vimscript rgb / rgba正则表达式

时间:2017-05-21 15:48:56

标签: regex vim colors

我正在尝试学习vimscript,所以我想到了制作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+\)

1 个答案:

答案 0 :(得分:1)

这应该有效:

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

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

在这里,我使用\v来指定"非常神奇的"模式。这被定义为:

  

\v的使用意味着在所有ASCII字符之后的模式中除外   0 - 9a - zA - Z_具有特殊含义。 "非常神奇"

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

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