我正在尝试学习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+\)
。
答案 0 :(得分:1)
这应该有效:
match(color, '\v^rgba?\(\d+,\d+,\d+\)')
为这些事情指定匹配模式总是一个好主意,因为否则行为会受到你是否使用魔术模式的影响。
在这里,我使用\v
来指定"非常神奇的"模式。这被定义为:
\v
的使用意味着在所有ASCII字符之后的模式中除外0
-9
,a
-z
,A
-Z
和_
具有特殊含义。 "非常神奇"
它更接近你在其他语言中可能习惯的东西(Python,Perl,Ruby等)。请注意,您不需要反斜杠引用,这看起来更像是来自任何通用语言的正则表达式。
在这种情况下,它还使regex101等工具更有用。您可能已经注意到regex101有一些风格,但vim不是其中之一。如果你使用非常神奇的模式,pcre风味(大部分)将适用于vim正则表达式。