Javascript regexp与sql create table语句中的表名匹配

Javascript regexp与sql create table语句中的表名匹配,javascript,sql,regex,node.js,Javascript,Sql,Regex,Node.js,我需要一个正则表达式的帮助,我正在用node js制作一个程序,用表结构加载sql并执行它们,我在数组中存储所有应该创建的表名。 我有下面的代码,它的工作,但我想知道是否有更好的方法来做这件事。提前谢谢 for (var i = 0, max = list.length; i < max; i++) { (function (j) { var sql = fs.readFileSync(path.join(__dirname, 'sql', list[j]), "u

我需要一个正则表达式的帮助,我正在用node js制作一个程序,用表结构加载sql并执行它们,我在数组中存储所有应该创建的表名。 我有下面的代码,它的工作,但我想知道是否有更好的方法来做这件事。提前谢谢

for (var i = 0, max = list.length; i < max; i++) {
    (function (j) {
        var sql = fs.readFileSync(path.join(__dirname, 'sql', list[j]), "utf8").toString();
        // var stmts = sql.match(/[_\"a-zA-Z0-9\s\,\(\)\*-]+;/gi);
        var tables = sql.match(/CREATE\sTABLE\s\"?[A-Z0a-z0-9_]+\"?/gi);
        if (tables) {
            for (var k = 0, max = tables.length; k < max; k++) {
                tables[k] = tables[k].replace(/create\stable\s+?/gi, '');
                tables[k] = tables[k].replace(/\"/, '');
                console.log("========= table name ==========");
                console.log(tables[k]);
            }
        }
    })(i);
} 
for(变量i=0,max=list.length;i
说实话,您的代码中存在一些重复:您将较长的子字符串与正则表达式匹配,然后再次使用正则表达式执行额外的正则表达式替换。我建议只使用一个正则表达式即可匹配并捕获我们需要的内容:

var sql=“create table\”myTable\“create table new_table12--”;
var re=/CREATE\s+表\s+\“?(\w+)/gi;
var表=[];
var-m;
while((m=re.exec(sql))!==null){
表1.push(m[1]);
document.write(“=表名=
”);//仅用于演示 document.write(m[1]+“
”);//仅用于演示 }
警报(表);
说实话,您的代码中存在一些重复:您将较长的子字符串与正则表达式匹配,然后再次使用正则表达式执行额外的正则表达式替换。我建议只使用一个正则表达式来匹配和捕获我们需要的内容:

var sql=“create table\”myTable\“create table new_table12--”;
var re=/CREATE\s+表\s+\“?(\w+)/gi;
var表=[];
var-m;
while((m=re.exec(sql))!==null){
表1.push(m[1]);
document.write(“=表名=
”);//仅用于演示 document.write(m[1]+“
”);//仅用于演示 }
警报(表格)以什么方式更好?更快?内存效率更高?更具可读性?不那么容易出现bug?更灵活?所有这些,以及更多,都可以用“更好”这个词来暗示,但它们往往是相互冲突的目标。以什么方式更好?更快?内存效率更高?更具可读性?不那么容易出现bug?更灵活?所有这些,以及更多,都可以用“更好”这个词来表达,但它们往往是相互冲突的目标。我不知道exec方法,现在我知道了谢谢你的建议我想我已经把它标记为Aswere了我不知道exec方法,现在我知道了谢谢你的建议我想我已经把它标记为aswered了