Regex, чтобы получить все имена классов JS в массиве - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь написать простое регулярное выражение, которое соответствует всем именам классов в файле.Он должен соответствовать им либо с пробелом, либо без него перед фигурной скобкой.

Например,

class myClass {...}

Возвращает ['myClass']

class myClass {....} class Foo{...}

Возвращает ['myClass',' foo '].

И т. д.

Это то, что я имею до сих пор, но, кажется, это не работает, когда нет места для скобки:

([a-zA-Z_{1}][a-zA-Z0-9_]+)(?=\{)

Ответы [ 2 ]

3 голосов
/ 23 сентября 2019

Используйте положительный взгляд назад и вперед :

const str = 'class myClass {....} class Foo{...} class Bar   { /* this is a class comment */ }';

const result = str.match(/(?<=class\s)(\w+)(?=\s*{)/g);

console.log(result)
0 голосов
/ 23 сентября 2019

Если вы хотите получить не только объявления классов, но и экземпляры классов, вы можете использовать что-то вроде (учитывая, что имена классов следуют условным обозначениям и начинаются с заглавной буквы):

const sample = `class Foo {};
$a = new Bar;

const myConst = 42;

function thisIsAFunction(){
    console.log(123);
}

class FlowController{}

let laser = new LaserActivator()

var myVar;class NewClass{...};
`;

const classExp = /[\s;][A-Z]\w+?[({\s;]/gm;

sample.match(classExp); //[" Foo ", " Bar;", " FlowController{", " LaserActivator(", " NewClass{"]

Или если вы этого не сделаетечтобы присутствовали дополнительные символы, такие как пробелы, точки с запятой и т. д., вы можете использовать lookahead (что-то вроде этого):

/[\s;][A-Z]\w+?(?=([\({\s]))/gm;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...