Regexp匹配十六进制颜色语法(和缩写形式)
Regexp Matching Hex Color Syntax (and Shorten form)
好吧,我对regex,尤其是JavaScript regexp很陌生。
我正在寻找一个匹配十六进制颜色语法的正则表达式(如#34ffa6
)然后我查看了w3school页面:Javascript RegExp Object
那就是我的正则表达式:
/^#[0-9a-f]{6}/i
它似乎有效,但是,如果我希望它也与";短十六进制颜色语法";类型(像#3fa
),有可能吗?我试过使用字符|
,但可能语法有问题。
/^#[0-9a-f]{3,6}$/i
将匹配#abc
、#abcd
、#abcde
、#abcdef
/^#([0-9a-f]{3}|[0-9a-f]{6})$/i
将匹配#abc
和#abcdef
,但不匹配#abcd
/^#([0-9a-f]{3}){1,2}$/i
将匹配#abc
和#abcdef
,但不匹配#abcd
/^#(?:[0-9a-f]{3}){1,2}$/i
将匹配#abc
和#abcdef
,但不匹配#abcd
看看RegExp-MDN,了解更多关于javascript中正则表达式的信息。
试试这个:
/^#([0-9a-f]{6}|[0-9a-f]{3})$/i
[0-9a-f]{6}
=6个字符[0-9a-f]{3}
=3个字符$
=结束
这应该可以工作/#[0-9a-f]{6}|#[0-9a-f]{3}/gi
为了快速地尝试正则表达式并学习它,你可以使用这个网站http://gskinner.com/RegExr/
您可能希望为#RGBA和#RRGGBBAA合并4位和8位十六进制。我在不同的设置中使用match()
和split()
来生成数组。我无法获得@rodneyrehm发布的所有变体来处理g标志和匹配,但如果我按从高到低的顺序列出字符数,则第一个(也是最详细的)解决方案可以工作:8、6、4、3。
let rx = /(?:#)[0-9a-f]{8}|(?:#)[0-9a-f]{6}|(?:#)[0-9a-f]{4}|(?:#)[0-9a-f]{3}/ig
let s = "123 #AA22CC 100% #12F abc #A2Cd #aa11cc44 test 236px";
let arr = s.match(rx); // arr == ["#AA22CC", "#12F", "#A2Cd", "#aa11cc44"]
MDN文档说(?:#)
应该忘记"#"
,但它没有,(?=#)
只是失败了。我误解了什么
我的最终目标是在从match()
返回的数组中包括其他数值。我快到了。。。
可能的十六进制颜色为-
格式 | 示例 |
---|---|
#RGB | #F00 |
#RGBA | #F005 |
#RRGGBB | #FF7C00 |
#RRGGBBAA | #FF7C0016 |
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- jQuery语法添加了var
- Javascript未捕获语法错误意外的标识符错误
- 为什么忽略了eval()代码中的语法错误
- 难以访问的JS环境中的语法错误
- 如何告诉MathJax对下标使用替代语法
- Javascript语法向设置发出sessionStorage值
- 未捕获的语法错误:意外的标记{
- 使用$scope方法时的ControllerAs语法
- "未捕获的语法错误:意外的标记}"
- javascript自执行函数-不同的语法
- 函数的Javascript语法
- WinJS内联绑定语法
- 使用JS函数来使用另一个函数的语法?node.js
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- 有没有针对带有表的JavaScript的Markdown语法解析器
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当使用控制器作为语法时,如何从父指令继承属性
- Regexp匹配十六进制颜色语法(和缩写形式)