[英]Extract hex code from string using regex
我正在尝试使用Node-Red(nodered.org)将消息传递给函数。
所以消息将是这样的: Can I have 00ff00 please?
我只对十六进制代码值感兴趣,我需要解析消息并用正则表达式提取十六进制。 这是我的代码:
var str = msg.payload;
var colorCode = str.match([A-Fa-f0-9]{6}/g);
return colorCode;
某事不正确,我收到一条错误消息,说“ Unexpected token {
即使我放了[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]/g
我得到一个A is not defined
错误,可能是因为它不认为它是正则表达式。
十六进制颜色始终从#
开始,并且可以具有3
或6
位数字的值。 试试/^#[a-z0-9]{3}([a-z0-9]{3})?$/i
:
'#fff000'.match(/^#[a-z0-9]{3}([a-z0-9]{3})?$/i);//["#fff000", "000"]
'#fff'.match(/^#[a-z0-9]{3}([a-z0-9]{3})?$/i);//["#fff", undefined]
另外,您在(正确的正则regexp
忘了正则regexp
起始斜杠)打印有误:
/[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]/g
较短版本的仅6位数字值:
'#fff000'.match(/^#[a-z0-9]{6}$/i);//["#fff000"]
或多色字符串检查:
'#fff000 #aaabbb #ccc999'.match(/#[a-z0-9]{6}/gi);
您需要输入/
使用任何
str.match(/[A-Fa-f0-9]{6}/)
或
str.match(/[a-f0-9]{6}/i)
而不是str.match([A-Fa-f0-9]{6})
现在,如果您的字符串可能包含多个十六进制代码,请改用以下代码:
str.match(/[a-f0-9]{6}/gi)
->这将获取所有此类十六进制代码的数组,因此您可以使用对数组的索引来访问每个此类实例,如下所示:
str="Can I have 00fA00 and B0fA0c please?"
hex_codes=str.match(/[a-f0-9]{6}/gi);
//hex_codes[0]=="00fA00" and hex_codes[1]=="B0fA0c"
这是小提琴演示
正如评论中指出的那样,您已经错过了Regex前面的/
来满足Javascript的Regex语法。
另外,我想建议您在正则表达式上加些界限,以避免某些奇怪的情况(例如捕获“ BABABABABA”)。 另外,正如下面的注释所指出的那样,#FFF是该颜色的有效值,因此可以进一步改善您的Regex。 结果如下:
/\b([a-f0-9]{3}|[a-f0-9]{6})\b/i
渔获:
Can I have C0ffee please?
The color is #FFF
没有抓住:
Testing 00000ff0000 just to be safe!
Making sure BABABABABA doesn't get catched also :)
Checking #ffff
最后一点,您可能要考虑使用#RRGGBB模式来捕获那些十六进制颜色,仅仅是因为您可能会找到6个字符的有效英文单词以及来自AF的字母。 因此,如果要这样做,只需在正则表达式前添加一个\\#
:
/\#\b([a-f0-9]{3}|[a-f0-9]{6})\b/i
检查此Regex101 ,其中包含一些输入的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.