Javascript 使用正则表达式从字符串中提取十六进制代码

Javascript 使用正则表达式从字符串中提取十六进制代码,javascript,regex,string,parsing,extract,Javascript,Regex,String,Parsing,Extract,我试图使用Node Red(nodered.org)将消息传递给函数 因此,消息可能是这样的:我可以要00ff00吗? 我只对十六进制代码值感兴趣,我需要解析消息并用正则表达式提取十六进制。这是我的代码: var str = msg.payload; var colorCode = str.match([A-Fa-f0-9]{6}/g); return colorCode; 有些地方不对劲,我收到一个错误,说意外标记{ 它不起作用,即使我把[AG-F-F09] [AF F-F09] [AF F

我试图使用Node Red(nodered.org)将消息传递给函数

因此,消息可能是这样的:
我可以要00ff00吗?

我只对十六进制代码值感兴趣,我需要解析消息并用正则表达式提取十六进制。这是我的代码:

var str = msg.payload;
var colorCode = str.match([A-Fa-f0-9]{6}/g);
return colorCode;
有些地方不对劲,我收到一个错误,说
意外标记{


它不起作用,即使我把[AG-F-F09] [AF F-F09] [AF F-F09] [AFA-F09] [AFA-F09]/G< /代码>我得到一个<代码> >不定义错误,可能是因为它不认为是正则表达式。

注释中指出,您在ReGEX前面错过了<代码> /<代码>以满足JavaScript的正则表达式语法。

此外,我建议您在正则表达式上设置边界,以避免出现一些奇怪的情况(如捕捉“babababa”)。此外,正如下面的评论所指出的,#FFF是颜色的有效值,因此您的正则表达式可以进一步改进。结果如下:

/\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
未捕获:

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个字母的有效英语单词,并且字母f是这样的,所以,如果您想这样做,只需在正则表达式前面加上< <代码> > <代码>:

/\#\b([a-f0-9]{3}|[a-f0-9]{6})\b/i

,它包含一些输入的示例。

十六进制颜色总是从
开始,可以有
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
start slash),修复了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"

这里是

您的正则表达式前面缺少了一个“/”-它是
str.match(/some regex/g);
您还可以用i modifierFair稍微缩短它,{3,6} then@EvertonAgner…那仍然允许使用#4444443或6个字符?抱歉,我不知道它只允许使用6个字符。十六进制颜色是6个字符RRGGBB,但是如果每个颜色的值都是相同的两位数,比如445566,那么就允许使用456,FF2288>F28等等。为了方便起见,我们假设使用的所有十六进制代码都是6位。所以我现在有了这段代码:'var colorCode=msg.payload.match(/[A-Fa-f0-9]{6}/g);返回colorCode;'它不会抛出任何错误,但不管我输入什么,只要正则表达式正确,我就会得到“undefined”我还尝试使用/I而不是/g,同样的效果感谢您的帮助我编辑了我的答案。我添加了6位值的纯regexp。我仍然没有定义我作为输入传递的任何内容var str=“我可以要00ff00吗?”var colorCode=str.match(/[A-Fa-f0-9]{6}/);return colorCode;Output:undefined即使我放入/g参数并使用return colorCode[0]访问结果也是一样的;不,还没有,我仍然没有得到任何输出Cheers,它可以工作..我现在唯一的问题是我得到的对象[Object Object]没有方法“匹配”,但这可能是我正在使用的框架(NodeRed)…谢谢您的帮助。我有一个建议。请始终检查
浏览器控制台
,以调试此类问题。