я хотел бы выбрать все подстроки из данной строки с помощью регулярного выражения javascript, начинающегося с 'CREATE TABLE' и заканчивающегося ';' - PullRequest
2 голосов
/ 13 октября 2019

Я бы хотел выбрать все подстроки от '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.*;$

1 Ответ

1 голос
/ 13 октября 2019

Надеюсь, это будет работать в режиме gs:

\bCREATE\b[^;]*;

, если бы у нас не было вложенных запросов с ; или другими дополнительными ; с.

Тест

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 . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...