不是一步,也不是在普通的文本编辑器中。如果您的 SQL 在语法上有效,则可以执行以下操作:
首先,从 SQL 中删除每个字符串并用占位符替换。然后你[core]
用别的东西代替你。然后从第一步恢复占位符中的文本:
- 查找所有出现的
'(?:''|[^'])+'
with 'n'
,其中n
是索引号(匹配的编号)。将匹配项存储在与 具有相同编号的数组中n
。这将从输入中删除所有 SQL 字符串并将它们交换为无害的替换,而不会使 SQL 本身无效。
- 做你的替换
[core]
。不需要正则表达式,正常的搜索和替换就足够了。
- 迭代数组,用
'1'
第一个数组项替换占位符,'2'
用第二个替换占位符,最多n
. 现在您已经恢复了原始字符串。
正则表达式解释说:
' # 单引号
(?: # 开始非捕获组
''|[^'] # 两个单引号,或者不是单引号
)+ # 结束组,至少重复一次
' # 单引号
JavaScript this 看起来像这样:
var sql = 'your long SQL code';
var str = [];
// step 1 - remove everything that looks like an SQL string
var newSql = sql.replace(/'(?:''|[^'])+'/g, function(m) {
str.push(m);
return "'"+(str.length-1)+"'";
});
// step 2 - actual replacement (JavaScript replace is regex-only)
newSql = newSql.replace(/\[core\]/g, "[new-core]");
// step 3 - restore all original strings
for (var i=0; i<str.length; i++){
newSql = newSql.replace("'"+i+"'", str[i]);
}
// done.