我有这样的字符串:
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 (');
但这对于大型查询来说效率非常低。希望有人能分享一些更聪明的想法。