Javascript 正则表达式在不接触类似模式的情况下替换模式



我有这样的字符串:

var str = 'SELECT * FROM table_a JOIN table_b JOIN (SELECT * FROM table_c) c JOIN table_d';

我希望在'JOIN'和'table_a'之间插入一个数据库名称;但我不希望在'JOIN'和子查询之间插入数据库名。

即,替换后,字符串应如下所示:

result = 'SELECT * FROM table_a JOIN database.table_b JOIN (SELECT * FROM table_c) c JOIN database.table_d';

有没有办法使用正则表达式在 JOIN 和表名之间插入数据库名称而不接触"JOIN("模式?

想象一下,字符串中有几十个具有不同名称的表......

愚蠢的方法是先插入数据库名称,如果找到任何"JOIN database.(",则将其还原:

var str = 'SELECT * FROM table_a JOIN table_b JOIN (SELECT * FROM table_c) c JOIN table_d';
str.replace(/JOIN/g, 'JOIN database.').replace(/JOINsdatabase.(/g, '/JOIN (');

但这对于大型查询来说效率非常低。希望有人能分享一些更聪明的想法。

相关内容

最新更新