簡體   English   中英

使用正則表達式從字符串中提取十六進制代碼

[英]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錯誤,可能是因為它不認為它是正則表達式。

十六進制顏色始終從#開始,並且可以具有36位數字的值。 試試/^#[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM