文字列がある場合、文字rgba(111,222,333,0.5)
列から個々の色を抽出するにはどうすればよいですか?
red => 111
green => 222
blue => 333
opacity => 0.5
これにはきちんとしたクリーンなソリューションを使用できるようにしたいので、正規表現が最適だと思いますか?
文字列がある場合、文字rgba(111,222,333,0.5)
列から個々の色を抽出するにはどうすればよいですか?
red => 111
green => 222
blue => 333
opacity => 0.5
これにはきちんとしたクリーンなソリューションを使用できるようにしたいので、正規表現が最適だと思いますか?
予測可能な文字列の正規表現は避け、次のことをお勧めします。
// assigning the rgb() colour to a variable:
var colorString = "rgba(111,222,333,0.5)",
// using String.prototype.substring() to retrieve
// the substring between the indices of the opening
// and closing parentheses:
colorsOnly = colorString.substring(
// here we find the index of the opening
// parenthesis, and add 1 to that index
// so that the substring starts after that
// parenthesis:
colorString.indexOf('(') + 1,
// and terminating the substring at the
// index of the closing parenthesis:
colorString.lastIndexOf(')')
// here we split that substring on occurrence
// of a comma followed by zero or more white-
// space characters:
).split(/,\s*/),
// String.prototype.split() returns an Array,
// here we assign those Array-elements to the
// various colour-, or opacity-, variables:
red = colorsOnly[0],
green = colorsOnly[1],
blue = colorsOnly[2],
opacity = colorsOnly[3];
または、オブジェクトを返す必要がある場合:
var colorString = "rgba(111,222,333,0.5)",
colorsOnly = colorString.substring(colorString.indexOf('(') + 1, colorString.lastIndexOf(')')).split(/,\s*/),
// here we initialise an empty Object:
components = {};
// here we assign the Array-elements to the
// named properties of that Object:
components.red = colorsOnly[0];
components.green = colorsOnly[1];
components.blue = colorsOnly[2];
components.opacity = colorsOnly[3];
console.log(colorsOnly, components);
より現代的な JavaScript を使用するように編集:
const colorString = "rgba(111,222,333,0.5)",
// here we use destructuring assignment to assign the returned Array-elements
// - in respective order - to the named variables:
[red, green, blue, opacity] = colorString.substring(colorString.indexOf('(') + 1, colorString.lastIndexOf(')')).split(/,\s*/),
// passing the variables into the Object Literal; in this instance
// we're passing in the variables which are the literal name of the
// properties they define and which also contain the relevant value:
colorObject = {
red,
green,
blue,
opacity
};
console.log(red, green, blue, opacity, colorObject);
参考文献:
これの正規表現は次のようになります。
^rgba\(([^,]+),([^,]+),([^,]+),([^,]+)\)$
Javascript コード:
var regex = /^rgba\(([^,]+),([^,]+),([^,]+),([^,]+)\)$/g;
var input = "rgba(111,222,333,0.5)";
if(regex.test(input)) {
var matches = input.match(regex);
for(var match in matches) {
alert(matches[match]);
}
} else {
alert("No matches found!");
}
JavaScript で必要な RGBA 値を取得するために、一致をトリミングしたり、値を数値に変換したりすることが必要な場合があります。
RegexHeroでこれで遊んでください
正規表現自体でパラメータ間のスペースを処理したい場合は、次のように見苦しく見えるかもしれません:
^rgba\(\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*\)$
Ahmed Bilal の回答については、修正する必要があります。間違っている場合は、お気軽に修正してください。:)
そのはず:
var colorsOnly = colorString.split(")");
var colorsOnly = colorString.split("(");
var colorsOnly = colorsOnly[1].split(",");
4 番目の文の変更に注目してください。ColosOnly から 3 番目の文は "(" 分割後の結果を表しています。したがって、3 番目の文にある必要があると思いますcolorsOnly[1]
。自分で試してみて、証明されました。
繰り返しますが、私が間違っている場合は、お気軽に修正してください! :)
常に rgba 形式の場合、次のようなことができます。
var str = 'rgba(111,222,333,0.5)'
var red = str.substr(5,3);
var green = str.substr(9,3);
var red = str.substr(13,3);