首页 > 解决方案 > 我会通过正则表达式 javascript 从给定字符串中选择所有子字符串以“CREATE TABLE”开头并以“;”结尾

问题描述

我会选择从'CREATE TABLE'到';'的所有子字符串 在下面的字符串中。在这个字符串中应该有 2 个匹配项。

CREATE TABLE `u3g8_student` (
  `student_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `roll_number` varchar(15) NOT NULL,
  `
) ENGINE=InnoDB AUTO_INCREMENT=1087 DEFAULT CHARSET=utf8;

1.此行不应该匹配

CREATE TABLE `u3g8_student` (
  `student_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `roll_number` varchar(15) NOT NULL,
  `
) ENGINE=InnoDB AUTO_INCREMENT=1087 DEFAULT CHARSET=utf8;

https://regex101.com/r/DWWkzy/4

试过这个

CREATE.*;$

标签: regex

解决方案


希望这可能适用于gs模式:

\bCREATE\b[^;]*;

如果我们没有嵌套查询;或其他附加;s。

测试

const regex = /\bCREATE\b[^;]*;/sg;
const str = `i would ilke to select all substrings from 'CREATE TABLE' to ';' in below string. In this string there should be 2 matches.

CREATE TABLE \`u3g8_student\` (
  \`student_id\` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  \`roll_number\` varchar(15) NOT NULL,
  \`
) ENGINE=InnoDB AUTO_INCREMENT=1087 DEFAULT CHARSET=utf8;

1.this line should not be matched


CREATE TABLE \`u3g8_student\` (
  \`student_id\` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  \`roll_number\` varchar(15) NOT NULL,
  \`
) ENGINE=InnoDB AUTO_INCREMENT=1087 DEFAULT CHARSET=utf8;`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}


如果您想简化/修改/探索表达式,它已在regex101.com的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。


正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读