Added support for finding elements that have underscores in their name (along with...
[jquery.git] / src / selector / selector.js
index 48c6e15..be50d33 100644 (file)
@@ -56,6 +56,9 @@ jQuery.extend({
                        "$=": "z&&z.substr(z.length - m[4].length,m[4].length)==m[4]",
                        "*=": "z&&z.indexOf(m[4])>=0",
                        "": "z",
+                       // these are for evaling in a regexp.
+                       "=~": "eval(m[4]).test(z)",
+                       "!~": "!eval(m[4]).test(z)",
                        _resort: function(m){
                                return ["", m[1], m[3], m[2], m[5]];
                        },
@@ -67,7 +70,7 @@ jQuery.extend({
        // The regular expressions that power the parsing engine
        parse: [
                // Match: [@value='test'], [@foo]
-               /^\[ *(@)([\w-]+) *([!*$^=]*) *('?"?)(.*?)\4 *\]/,
+               /^\[ *(@)([\w-]+) *([!*$^=!~]*) *('?"?)(.*?)\4 *\]/,
 
                // Match: [div], [div p]
                /^(\[)\s*(.*?(\[.*?\])?[^[]*?)\s*\]/,
@@ -77,7 +80,7 @@ jQuery.extend({
 
                // Match: :even, :last-chlid, #id, .class
                new RegExp("^([:.#]*)(" + 
-                       ( jQuery.chars = "(?:[\\w\u0128-\uFFFF*-]|\\\\.)" ) + "+)")
+                       ( jQuery.chars = "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)" ) + "+)")
        ],
 
        token: [
@@ -149,7 +152,7 @@ jQuery.extend({
 
                        // An attempt at speeding up child selectors that
                        // point to a specific element tag
-                       var re = /^[\/>]\s*([\w*-]+)/;
+                       var re = new RegExp("^[/>]\\s*(" + jQuery.chars + "+)");
                        var m = re.exec(t);
 
                        if ( m ) {
@@ -204,7 +207,7 @@ jQuery.extend({
 
                                } else {
                                        // Optomize for the case nodeName#idName
-                                       var re2 = new RegExp("^(\\w+)(#)(" + jQuery.chars + "+)");
+                                       var re2 = new RegExp("^(" + jQuery.chars + "+)(#)(" + jQuery.chars + "+)");
                                        var m = re2.exec(t);
                                        
                                        // Re-organize the results, so that they're consistent