課題は、(JavaScript で) 文字列値を取得し、次のことを行うことです。
a) 文字列値が有効な色表現 (3 桁の 16 進数、6 桁の 16 進数、または RGB 値) であるかどうかを判断します。
b) 有効な色の値を取得します (例: 3 つの 16 進数、3 つの 16 進数のペア、または 3 つの RGB 値)
c) これをできるだけ効率的に行う。
次の正規表現は機能しますが、できるだけ効率的にする必要があります。
RGB(r,g,b) 一致の場合、r、g および b の値が 0 ~ 255 であることを確認し、r、g、b 一致のみを許可します (たとえば、入力は "255,255,255" または "255, 255, 255" です)または「rgb(255,255,255)」など)
re = /^rgb\(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]),\s*([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]),\s*([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\)$|^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]),\s*([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]),\s*([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/;
6 桁の 16 進数値 (例: "FFFFFF") の場合:
re = /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/;
3 桁の 16 進数値 (例: "FFF") の場合:
re = /^([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/;
これらのそれぞれについて、次を使用します。
result = re.exec(value);
if (result) {
// process using e.g. result[1], result[2] & result[3] as needed
}
これらはこれを達成するための最も効率的な正規表現ですか? それとも、おそらく正規表現を使用しないより良い方法がありますか?
(クレジット: これは、 http: //www.phpied.com/rgb-color-parser-in-javascript で Stoyan によって RGB カラー パーサー コードで発見された無効な一致を解決しています)