- // Look for a string-like sequence
- var str = "([a-zA-Z*_-][a-zA-Z0-9_-]*)";
-
- // Look for something (optionally) enclosed with quotes
- var qstr = " *'?\"?([^'\"]*)'?\"? *";
-
- while ( t && /^[a-zA-Z\[*:.#]/.test(t) ) {
- // Handles:
- // [@foo], [@foo=bar], etc.
- var re = new RegExp("^\\[ *@" + str + " *([!*$^=]*) *" + qstr + "\\]");
- var m = re.exec(t);
-
- // Re-organize the match
- if ( m ) m = ["", "@", m[2], m[1], m[3]];
-
- // Handles:
- // [div], [.foo]
- if ( !m ) {
- re = new RegExp("^(\\[)" + qstr + "\\]");
- m = re.exec(t);
- }
-
- // Handles:
- // :contains(test), :not(.foo)
- if ( !m ) {
- re = new RegExp("^(:)" + str + "\\(" + qstr + "\\)");
- m = re.exec(t);
- }
-
- // Handles:
- // :foo, .foo, #foo, foo
- if ( !m ) {
- re = new RegExp("^([:.#]*)" + str);
- m = re.exec(t);
+ while ( t && /^[a-z[({<*:.#]/i.test(t) ) {
+
+ for ( var i = 0; i < jQuery.parse.length; i++ ) {
+ var re = new RegExp( "^" + jQuery.parse[i]
+
+ // Look for a string-like sequence
+ .replace( 'S', "([a-z*_-][a-z0-9_-]*)" )
+
+ // Look for something (optionally) enclosed with quotes
+ .replace( 'Q', " *'?\"?([^'\"]*)'?\"? *" ), "i" );
+
+ var m = re.exec( t );
+
+ if ( m ) {
+ // Re-organize the match
+ if ( jQuery.parseSwap[i] )
+ m = ["", m[1], m[3], m[2], m[4]];
+
+ // Remove what we just matched
+ t = t.replace( re, "" );
+
+ break;
+ }