我的CSS文件已经破了,其中包含完整的字符和损坏的color: #{hexval};
属性。
我想检索十六进制值。从技术上讲,我想:
我一直在修补Regex101(https://regex101.com/)和谷歌一小时,只能获得这些:
/(?:color#+.....)\w/g
/(?:color#+.....+?(?=color))\w/g
问题是:
/(?:color#+.....)\w/g
在开始时有效,但在字符串后面会中断。/(?:color#+.....+?(?=color#))\w/g
在开始时似乎更好,但在字符串中稍后会有不同的方式。......我不知道为什么或如何,所以我坚持'找到匹配模式'部分。我首先尝试了一些替代品,但它没有用,我失去了我做的事情。
任何帮助将不胜感激。谢谢。
color.txt
档案样本
ccolor#969896c1color#0086b3eecolor#795da31color#333ecolor#63a35ccolor#a71d5dde1cceeacolor#183691color#ed6a43dcolor#b52a1dcolor#f8f8f8color#b52a1drccecolor#63a35clcolor#693a17ecolor#1d3e81color#008080ccolor#333bcolor#333dcolor#bd2c00color#ffecec1color#55a532color#eaffeadrcolor#795da3ocolor#1d3e81er #ffffffcolor#999999r1#e8e8e8blcolor#ffffffcolor#333333crorcolor#000000erlayer#c8c8fal0030#ffffff2erlayere#C6
结果示例:
C 颜色#969896 c1color#0086b3eecolor#795da31color#333ecolor#63a35ccolor#a71d5dde1cceeacolor#183691color#ed6a43dcolor#b52a1dcolor#f8f8f8color#b52a1drccecolor#63a35clcolor#693a17ecolor#1d3e81color#008080ccolor#333bcolor#333dcolor#bd2c00color# ffecec1color#55a532color#eaffeadrcolor#795da3ocolor#1d3e81er#ffffffcolor#999999r1#e8e8e8blcolor#FFF的 fffcolor#333 333crorcolor#000000erlayer#c8c8fal0030#ffffff2erlayere#C6
编辑:正如WiktorStribiżew和Maria Deleva所发现的那样,问题是当一个序列像color#fff
那样结束并且后面跟寄生虫文本(例如'ab')那么另一个{{ 1}}'s'c',正则表达式没有“识别”十六进制三元组。 [仍然,除了添加异常(例如'如果十六进制值的3个第一个字符相同而最后一个字符是'c',只考虑3个第一个字符),我看不到如何检测寄生序列。 ]
答案 0 :(得分:1)
您希望在[a-zA-Z0-9]
之后检索十六进制值(6 color#
个字符)。
您可以使用
/color#([a-z0-9]{6})/gi
请参阅regex demo,您需要的值在第1组内。
正则表达式匹配:
color#
- 文字color#
字符串([a-z0-9]{6})
- 第1组捕获6(由于限制量词{6}
)字符a-z
,A-Z
内部(作为不区分大小写的修饰符{{1}) }已使用)或/i
。或者匹配6和3字符十六进制值:
0-9
<强>解释强>:
/color#([a-f0-9]{6}|[a-f0-9]{3}(?!c(?:ol?)?))/gi
- 文字子词color#
color#
- 第1组捕获2个替代方案中的任何一个:
([a-f0-9]{6}|[a-f0-9]{3}(?!c(?:ol?)?))
- 6个十六进制字符([a-f0-9]{6}
,a-z
个字母或A-Z
个数字)0-9
- 或|
- 未跟[a-f0-9]{3}(?!c(?:ol?)?)
或c
或co
的3个十六进制字符。 答案 1 :(得分:1)
这是我的版本:
(color#(?:[a-f0-9]{6}(?!olor)|[a-f0-9]{3}))
在线演示 https://regex101.com/r/kR1fF0/4
基本上,如果跟随olor(即,如果它意外地从颜色中吸收了c),我将丢弃该匹配,如果它不匹配所有6,它将尝试匹配3个字符。