How frequently does the letter a appear in:
Q: Регулярное выражение для получения атрибутов запроса Вот код:
var query = id  INT    (10)  AUTO_INCREMENT  KEY,  name  VARCHAR( 255 ),  info  VARCHAR    ( 255)  DEFAULT(your text )  DEFAULT(your text ) AUTO_INCREMENT, text ,   age INT(2), date DATETIME DEFAULT(NOW()), counter INT(10) DEFAULT(10).split(,);
var regular = /\w+([\s]*\((.*?)\)(\s|$)|(\s|$))/g;

for(var i=0, matches; i < query.length; i++) {
    query[i] = query[i].trimLeft();

    matches = query[i].match(regular);

    console.log(query[i]);
    console.log(matches);
}

Как видно, я парсю query запрос на значения и атрибуты. Скорость парсинга должна быть большой, поэтому экономлю на спичках. Как оптимизировать регулярку?
Пример в живую: http://jsfiddle.net/2ZnjL/
A: Короче говоря было написано:
var parse_expression = id  INT  (10)  AUTO_INCREMENT  KEY,  \
name  VARCHAR( 255 ),  \
info  VARCHAR    ( 255)  DEFAULT(your text )  DEFAULT(your text ) AUTO_INCREMENT, \
text ,   \
age INT(2), \
date DATETIME DEFAULT(NOW()), \
counter INT(10) DEFAULT(10), \
other varchar(255) DEFAULT (your (mine) text),\
other2 varchar(255) DEFAULT (use close braket - ) to finish condition string ),\
other3 varchar(255) DEFAULT (stop,the split,) );

var div = document.getElementById(b);

var len = parse_expression.length;
var tokens = [];
var compiler_tokens = {};
var tags = [, , (, )];
var token = ;
var ifOpenTokens;

for(var pos = 0, last_cut = 0; pos < len; pos++, ifOpenTokens = false) {
    if(tags.indexOf(parse_expression[pos]) != -1) {

        if(!(parse_expression[pos-1] != undefined 
            && parse_expression[pos-1] == \\  // если предыдущий символ - обратный слеш
            && parse_expression[pos-2] != undefined
            && parse_expression[pos-2] != \\) 
            || parse_expression[pos-1] != \\// если предыдущий символ - не слеш, то обрабатываем
        ) {

            if(compiler_tokens[parse_expression[pos]] == undefined || !compiler_tokens[parse_expression[pos]]) {
                if((parse_expression[pos] == ( || parse_expression[pos] == )) 
                    && (compiler_tokens[] == undefined || !compiler_tokens[])  
                    && (compiler_tokens[] == undefined || !compiler_tokens[])
                ) {
                    compiler_tokens[parse_expression[pos]] = 1;
                }
                else if(parse_expression[pos] == ( || parse_expression[pos] == )) {
                    continue;
                }
                else {
                    compiler_tokens[parse_expression[pos]] = true;
                }
            }
            else {
                if((parse_expression[pos] == ( || parse_expression[pos] == )) 
                    && (compiler_tokens[] == undefined || !compiler_tokens[])
                    && (compiler_tokens[] == undefined || !compiler_tokens[])
                ) {
                    compiler_tokens[parse_expression[pos]]++;
                }
                else if(parse_expression[pos] == ( || parse_expression[pos] == )) {
                    continue;
                }
                else {
                    compiler_tokens[parse_expression[pos]] = false;
                }
            }
        }
    }

    if(parse_expression[pos] == ,) {
        // check for open tokens
        console.log(compiler_tokens[], compiler_tokens[\]);

        if(compiler_tokens[(] != compiler_tokens[)] 
        && (!compiler_tokens[] && !compiler_tokens[])) {
            throw new Error(Remained unclosed tags in query 
                + parse_expression.substring(last_cut, pos));
        }
        else {
            if(compiler_tokens[] || compiler_tokens[]) {
                ifOpenTokens = true;
            }   
        }

        if(!ifOpenTokens) {
            token = parse_expression.substring(last_cut, pos);
            tokens.push(token);
            last_cut += token.length + 1;
        }
    }

    if(pos == len - 1) {
        token = parse_expression.substring(last_cut, pos + 1);
        tokens.push(token);
    }
}

if (compiler_tokens[] || compiler_tokens[]) {
    throw new Error(Remained unclosed tags in query + parse_expression);
}


:D Собака убежала, вроде годно работает. Скрипт также будет разбирать данные в INSERT.
user
I found ninety-seven "a"s in the provided passage.
assistant