如何使用正则表达式nodejs从句子中获取单词

时间:2018-01-02 09:37:52

标签: node.js regex

我有一个用例,我需要从我的sql查询中获取表名 比如假设我有

select * from schema.tableName

OR

select * from schema.tableName where id = 123

OR

select column1, column2, column3 from schema.tableName where id = 123

在上述情况下需要从sql查询中获取'schema.tableName',如何在Node中使用regex来完成。

我试过(?<=from)(\s+\w+\b) 但我收到警告,javascript不支持后面的内容。

2 个答案:

答案 0 :(得分:0)

可以轻松编写与您作为示例提供的查询类似的查询中的表名匹配的RegEx。

试试此RegEx:/select .* from ([^ ]*)/i

请参阅以下完整代码:

var sql1 = "select * from tableName";
var sql2 = "select * from tableName where id = 123";
var sql3 = "select column1, column2, column3 from tableName where id = 123";
var t1 = sql1.match(/select .* from ([^ ]*)/i);
var t2 = sql2.match(/select .* from ([^ ]*)/i);
var t3 = sql3.match(/select .* from ([^ ]*)/i);
console.log(t1[1]);
console.log(t2[1]);
console.log(t3[1]);

但是,如果您需要匹配所有可能的有效选择查询中的表名,RegEx将变得复杂。

修改

您可以使用上述RegEx的精简版本来获得相同的结果。

/ from ([^ ]*)/i

答案 1 :(得分:0)

也许是这样的:

var query = "select column1, column2, column3 from schema.tableName where id = 123"
var result = query.match(/from\s+([\.\w]+)+\s+/i);

var tableName = null;
if (result && result.length > 1) {
    tableName = result[1];
}