извлечь только имя функции (строковые значения), используя одно выражение регулярного выражения - PullRequest
1 голос
/ 14 октября 2019

Я пытаюсь извлечь имена функций из файла JavaScript с помощью регулярных выражений. 2 случая:
Случай 1:

{ 'test1': function(){},
  'test2': function(){}
}

Случай 2:

{ test1: function(){}
  test2: function(){}
}

Ожидаемый результат для любого случая: [test1, test2]

Теперь, когда я использую это выражение регулярного выражения с этим кодом javascript

contents.match(/(.+)(?=: function\()/g);

Текущий результат, который я получаю,

[ '\t\'test1\'',
    '\t\'test2\'']

Как получить ожидаемоерезультат: [test1, test2], без включения специальных символов, таких как \ t \ '

Заранее спасибо

Ответы [ 2 ]

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

захватывает любую строку (не пробел или ' или "), когда за ней могут следовать ' или ", любые пробелы и : function

let contents = `
{ test1:function(){}
  'test2' : function(){}
  "tes-t2": function(){}
  "teè#//st2"   : function(){}
}
`
console.log(contents.match(/([^'"\s]+)(?=['"]?\s*:\s*function\()/g))
0 голосов
/ 16 октября 2019

Вы можете использовать 2 группы захвата.

В группе 1 сопоставьте либо ' или ", и используйте обратную ссылку \1, чтобы сопоставить то же, что и в группе 1, чтобы предотвратить запуск и завершение имен функций. с другой кавычкой, такой как 'test1"

В группе 2 введите имя функции.

(["']?)([^"'\s{}]+)\1\s*:\s*function\(\)

По частям

  • ( Захват группа1
    • ["']? Соответствует опциональному ' или "
  • ) Закрыть группу
  • ( Захват группа 2
  • )\1 Закрыть группу 2
  • \s*:\s* Соответствие : между 0+ пробелами
  • function\(\) Функция соответствия ()

Regexдемо

const regex = /(["']?)([^"'\s{}]+)\1\s*:\s*function\(\)/gm;
const str = `{ 'test1': function(){},
  'test2': function(){}
}

{ test1: function(){}
  test2: function(){}
}
`;
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++;
  }
  console.log(m[2]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...