我正在尝试从javascript中的SQL字符串中删除所有注释。我有这个正则表达式删除几乎所有的人,但有一个问题。
请查看此链接
https://regex101.com/r/JaEWKO/1
当有嵌套的多行注释时,则正则表达式将无法正常工作。该情况已在链接中提及
关于堆栈溢出的这个问题,我已经遍历了多个链接。\ _(ツ)_ /
Regular expression to remove comments from SQL statement
还有许多其他
这是我当前正在使用的正则表达式
var sql = storedProc.replace(/(--.*)|(((\/\*)+?[\w\W]+?(\*\/)+))/g, '')
我希望它能删除字符串中的所有注释,但在嵌套多行注释的情况下会中断。
有人可以帮我吗?
答案 0 :(得分:1)
您实质上是在寻找/*
与*/
之间的平衡组,但不幸的是Javascript不支持递归模式。或者,您可以尝试匹配/*
,然后匹配*/
,中间不插入/*
或*/
,然后连续替换为空字符串:>
const str = `--GO
--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO
something which is not a comment
/*
DECLARE @Gas SMALLDATETIME = '1/1/2016',
@System VARCHAR(Max) = '30',--'12,76,466,465,30,226',
/*following param is to help decide Transportation or Storage */
@Contract INT = 0,--Transport or (1 = storage).
/*following param is to help decide dth or %*/
-- Contract Period 0 = 5 Years, 1 = 10 years,..., 4=25 years
*/`;
let intermed = str.replace(/--.*\n?/g, '');
let match;
while (match = intermed.match(/(?:\/\*)+(?:(?!\*\/|\/\*)[\w\W])+(?:\*\/)+/)) {
intermed = intermed.replace(match[0], '');
}
console.log(intermed);
答案 1 :(得分:0)
要从SQL中删除所有类型的注释,请参见pg-minify。
它适用于PostgreSQL + MS-SQL + MySQL,并且可以压缩生成的SQL。