Created
February 21, 2013 15:03
-
-
Save pbakaus/5005271 to your computer and use it in GitHub Desktop.
Challenge: remove the CSS keyframe animations from this!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.class{rule: prop;}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes spinoff{0%{transform:rotate(0deg)}100%{transform:rotate(-360deg)}}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(360deg)}}@-moz-keyframes spinoff{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(-360deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}#id{rule: prop;}@-webkit-keyframes spinoff{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg)}}@-ms-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}@-ms-keyframes spinoff{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(-360deg)}} |
str.replace(/.*/, '');
css.replace( /@[a-z-]*keyframes\s+\w+\s*\{\s*(\d+%\{[^}]+\}\s*)+\}/g, "" );
@cowboy wins. Clearly. =)
/@(-moz-|-webkit-|-ms-)*keyframes\s\w+{(\d%{[-\w:\w+()]+}\d+%{[\w:\w()-]+)+}}/g
@scottgonzalez wins (but hmammana one's works equally well)! Thanks all!
The regex explained:
- arbitrarily prefixed keyframes:
@[a-z-]*keyframes
- a required space:
\s+
- keyframe name:
\w+
- optional space before frames:
\s*
- opening brace for frames:
\{
- optional space before frames:
\s*
- at least frame
(\d+%\{[^}]+\}\s*)+
:- percentage (technically should probably be
\d{1,3}
or even more strict):\d+%
- opening brace for rule:
\{
- arbitrary rules comprised of anything beside a closing brace:
[^}]+
- closing brace for rule:
\}
- optional space between rules:
\s*
- percentage (technically should probably be
- closing brace for frames:
\}
I've never used keyframes and haven't read the spec, so my terminology for names/frames/rules may be off...
nice! the idea that I needed was the grouping and repeating of frames – I somehow tried to search for "text without }}" and then }}, but that doesn't work. Thanks again!
Try this.....
@(-moz-|-webkit-|-ms-)*keyframes\s(.*?){([0-9%a-zA-Z,\s.]*{(.*?)})*[\s\n]*}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Use parselib: https://github.com/nzakas/parser-lib
That'll give you an AST, then you can transform back to CSS. Far more reliable than regex here, I'd think.