24.04.2012, 00:24
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Мой RegExp для поиска цветов
Начинаю изучать регулярные выражения. Вот моё извращение на тему "Найти цвет в строке":
re = /(?:#[a-f0-9]{3})|(?:#[a-f0-9]{6})|(?:red)|(?:orange)|(?:aqua)|(?:gray)|(?:navy)|(?:silver)|(?:black)|(?:green)|(?:olive)|(?:teal)|(?:blue)|(?:lime)|(?:purple)|(?:white)|(?:fuchsia)|(?:maroon)|(?:red)|(?:yellow)|(?:rgba?\((?:\d+,?)+\))/i
Все замечания, добавления и идеи пишите в тему
P.S. Я понимаю, что это, наверное, не кому не нужно, просто хочу понять, можно ли сделать этот рег как-то проще и лучше
Последний раз редактировалось Раед, 24.04.2012 в 18:47.
|
|
24.04.2012, 00:41
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
re = /#[a-f0-9]{3}|#[a-f0-9]{6}|red|aqua|gray|navy|silver|black|green|olive|teal|blue|lime|purple|white|fuchsia|maroon|red|yellow|rgba?\(\s*\d+\s*,\s*\d+\s*,\s*\d+(?:\s*,\s*[\d.]+\s*)?\)/i
alert( re.test( "red" ) ); // true
alert( re.test( "rgb(255, 234, 123)" ) ); // true
alert( re.test( "rgba(255, 234, 123, 0.1)" ) ); // true
// куча пробелов
alert( re.test( "rgba( 255, 234, 123, 0.1 )" ) ); // true
alert( re.test( "#f0fe34" ) ); // true
alert( re.test( "#fe4" ) ); // true
alert( re.test( "а нету цвета" ) ); // false
alert( re.test( "белый" ) ); // false
Последний раз редактировалось devote, 24.04.2012 в 00:44.
|
|
24.04.2012, 10:29
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
devote,
О, спасибо, думал, что | только на 1 символ действует.
|
|
24.04.2012, 16:29
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
Раед,
не...прелесть или в рег. выражениях, что "или" работает с человеческой логикой, как в паскале: (a=5) or (a=6), а не так как в js, не напишешь же: a==5 || a==6 || a==7
__________________
оляля, ололо
|
|
24.04.2012, 16:40
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
9xakep, не понял вашего примера. Как это вообще связано?))
|
|
24.04.2012, 17:56
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Вот ещё рег для поиска всяких едениц типа 1em 2pt
re=/(?:\s|^)\d+(?:px|em|%|mm|cm|pt|pc|ex)(?=\s|$)/gi
Может кто подскажет, как сделать так, чтобы передний пробел в результат не входил
|
|
24.04.2012, 17:58
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Сообщение от 9xakep
|
а не так как в js, не напишешь же: a==5 || a==6 || a==7
|
В смысле, почему не напишешь?
a = 5
alert(a==5 || a==6 || a==7)
|
|
24.04.2012, 18:01
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Будь проще.
re=/\b\d*?(?:px|em|%|mm|cm|pt|pc|ex)\b/gi
str= " 1em ";
alert("'" + str.match(re) + "'");
P. S. Кстати, не уверен, что с точки зрения спецификации указание единиц измерения регистронезависимо. Возможно, флаг i нужно убрать.
Последний раз редактировалось trikadin, 24.04.2012 в 18:04.
|
|
24.04.2012, 18:19
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
А можешь пояснить, что значит \b и чем отличается от [\s^$]. (Справочник читал, но не понял). И ещё по поводу \d*?. Разве могут быть единицы измерения без цифр? А вот без самих обозначений (ну px и т.п.) могут. Что я не понимаю?
re=/\b\d*?(?:px|em|%|mm|cm|pt|pc|ex)\b/gi
str= " 1 ";
alert("'" + str.match(re) + "'");
str = ' px'
alert("'" + str.match(re) + "'");//странновато как-то
Сообщение от trikadin
|
Кстати, не уверен, что с точки зрения спецификации указание единиц измерения регистронезависимо.
|
Да я тоже не уверен
Последний раз редактировалось Раед, 24.04.2012 в 18:46.
|
|
24.04.2012, 18:36
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
Сообщение от trikadin
|
9xakep, не понял вашего примера. Как это вообще связано?))
|
Воспоминания из дества))
__________________
оляля, ололо
|
|
|
|