RegEx с rgb () - PullRequest
       8

RegEx с rgb ()

1 голос
/ 19 сентября 2019

Я только что написал следующее регулярное выражение, чтобы фиксировать всевозможные пробельные ошибки в объявлении rgb().Являются ли они более кратким способом получения одинаковых шаблонов?

/( |    )*r( |  )*g( |  )*b( |  )*\(( | )*[0-9]+( | )*,( |  )*[0-9]+( | )*,( |  )*[0-9]+( | )*,*( | )*\)( | )*;*( | )*/g

Приведенное выше регулярное выражение охватывает все эти объявления:

rgb(255, 240, 0);
rgb(0,0, 0)
rgb (  0,12,0)
r gb(12,24,26 ) ;

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Ваше регулярное выражение выглядит лишним.Я бы использовал что-то вроде этого:

r\s*g\s*b\s*\(\s*\d{1,3}\s*(?:,\s*\d{1,3}\s*){2}\)\s*;?

Обратите внимание, как пробельные символы могут быть сопоставлены через \s*, а цифры - через \d.

Демонстрация

Чтобы ограничить записи от 0 до 255, требуется следующая адаптация:

r\s*g\s*b\s*\(\s*(?:1?\d{1,2}|2[0-4]\d|25[0-5])\s*(?:,\s*(?:1?\d{1,2}|2[0-4]\d|25[0-5])\s*){2}\)\s*;?

Обратите внимание, что \d представляет собой набор всехдесять цифр.Если требуется подмножество этих цифр, нам нужно использовать их в наборе символов вручную без \d.

Demo

1 голос
/ 19 сентября 2019

Вместо того, чтобы пытаться сопоставить все случаи, которые проходят , а не , я бы просто использовал следующий единственный шаблон для ожидаемого формата, не содержащий пробелов:

rgb\([0-9]+,[0-9]+,[0-9]+\)

Если выКроме того, мы хотели бы утверждать, что все числа находятся в диапазоне от 0 до 255, тогда мы можем изменить вышеприведенное значение на:

rgb\((1?[0-9]{1,2}|2[0-4][0-9]|25[0-5]),(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5]),(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\)

Пример кода:

var invalid1 = "rgb(255, 240, 0)";
var invalid2 = "rgb(0,0, 0)";
var invalid3 = "rgb (  0,12,0)";
var invalid4 = "r gb(12,24,26 )";

var valid = "rgb(10,20,30)";

console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(invalid1));
console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(invalid2));
console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(invalid3));
console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(invalid4));

console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(valid));
...