Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (我的)SQL create语句上的正则表达式_Javascript_Mysql_Sql_Regex - Fatal编程技术网

Javascript (我的)SQL create语句上的正则表达式

Javascript (我的)SQL create语句上的正则表达式,javascript,mysql,sql,regex,Javascript,Mysql,Sql,Regex,我使用的是我喜欢且熟悉的旧版本工具, 但它没有在create语句中创建正确的输出。 因为这将是一项重复性的任务,所以我要做一点 网络工具;在JaveScript中制作我的目标正则表达式。我想休息一下 在几位中增加替换项,但我认为1行正则表达式可以 让我走吧,然后我就可以倒着干了 我希望在批处理(或任何单词)之后替换第一个'BINARY(16)()。我在RegexBuddy中进行测试,我尝试了:\(\s\w+\s(BINARY\(\d{1,2}\[^,])以及许多其他东西,但没有成功 CREATE

我使用的是我喜欢且熟悉的旧版本工具, 但它没有在create语句中创建正确的输出。 因为这将是一项重复性的任务,所以我要做一点 网络工具;在JaveScript中制作我的目标正则表达式。我想休息一下 在几位中增加替换项,但我认为1行正则表达式可以 让我走吧,然后我就可以倒着干了

我希望在批处理(或任何单词)之后替换第一个
'BINARY(16)
()。我在RegexBuddy中进行测试,我尝试了:
\(\s\w+\s(BINARY\(\d{1,2}\[^,])
以及许多其他东西,但没有成功

CREATE TABLE Batch(
    batch_id               BINARY(16)    NOT NULL,
    batch_datetime         DATETIME,
    overhead_project_id    BINARY(16)    NOT NULL,
    PRIMARY KEY (batch_id)
)ENGINE=INNODB;
使用
ConvertMe.replace(/(FooStatement/gi,“INT(11)notnull自动递增”);
。 我的最终目标是:(我还必须修复其他create语句上的一些浮点和其他整数)


解决方案:ConvertMe=ConvertMe.replace(/(((\s |\n |\r)\w\s+)(BINARY(\d{1,2})[^,]*)/gi,“$1INT(11)NOT NULL AUTO INCREMENT”);

试试这个..我想这就是你想要的

\(?[A-Za-z].+?(BINARY\([0-9]{1,2}\))

按照您的描述方式,您不需要复杂的正则表达式,这并不需要,只需简单的搜索/替换即可:

/BINARY\(16\)/INT\(11\)/g

为了满足您对添加
AUTO_INCREMENT
命令的兴趣,我想提醒您,正则表达式只是一种查找和/或替换字符串的工具。您描述的是不同的;您希望执行两次搜索和一次插入,插入基于第一次搜索。不要让事情变得复杂为您自己复杂化;分别执行这些步骤

  • 找到
    主键(*)
    ,提取
    *
  • 搜索包含
    *
    字符串的行
  • 在该行末尾,将
    替换为
    自动增量,

  • 使用以下javascript:

    var re = new RegExp("(\((\s|\n|\r)*\w*\s+)(BINARY\(\d{1,2}\)[^,]*)", "g");
    var myArray = str.replace(re,"$1YOUR_REPLACEMENT" );
    

    我不清楚您要匹配的是什么。只是二进制(16)还是行的其余部分?行的其余部分,为清晰起见进行了更新。~t您的表达式应该是
    \(\s+\w+\s+(二进制\(\d{1,2}\)[^,]))
    ,但如果第一个二进制字段不是第一个字段,这仍然无法满足您的要求。很高兴您找到了解决方案。请将其添加到下面作为答案,不要只编辑原始问题。这很有帮助,但我正在尝试匹配(-首先修复主键。这返回了所有主键。我想我们需要将它与二进制匹配的时间限制为1。同时我对它做了一点修改:
    \(?二进制\([0-9]{1,2}.[^,)]
    我不需要触摸列名(批处理id等)我需要能够在PrimaryKey行的末尾添加自动递增。不过,这对其他部分也会有帮助。@intellilogic-(a)很乐意提供帮助,如果你觉得这个(或任何其他答案)有用,请投赞成票。(b)添加
    AUTO_INCREMENT
    将是第二个更复杂的过程。一定要单独执行它们。太棒了,谢谢你和所有帮助过我的人。我太新了,无法投票支持这个答案:(最终结果:ConvertMe=ConvertMe.replace(/(\s | \n | \r)*\w*\s+(二进制(\d{1,2})[^,]*)/gi 1INT(11)NOT NULL AUTO INCREMENT)“是的,$1是”(批次号),而$2是空的,因此我将整个匹配项替换为“$1_uuuuuyourr_uuuureplacement_uuuuuuuu”,也许有更干净的解决方案,但我的解决方案有效
    var re = new RegExp("(\((\s|\n|\r)*\w*\s+)(BINARY\(\d{1,2}\)[^,]*)", "g");
    var myArray = str.replace(re,"$1YOUR_REPLACEMENT" );