2015-05-21 2 views
2

Я искал "get everything but" regex questions, но я не мог заставить его работать для моего дела. Я пытался получить все, кроме закрывающего комментария */.Улучшение пользовательского регулярного выражения

У меня есть это выражение, который получает мне декларацию яваскрипта функций:

/(\b(f|F)unction(.*?)\((.*?)\)\s*\{)/g 

Единственная проблема, которую я нашел с ним в данный момент является то, что он также получает мне такие вещи, как:

function to do whatever */ function demo (el, hop) { 

Вместо

function demo (el, hop) { 

При наличии этой функции заявление с комментарием Конта в слово function.

/** * recursive function to do whatever */ function demo (el, hop) { /*whatever*/ } 

Это то, что я пытался до сих пор без результата:

/(\b(f|F)unction^((?!\*\/).)*?\((.*?)\)\s*\{)/g 

который в основном используя то, рекомендуя in this post:

^((?!hede).)*$ //recommended 
^((?!\*\/).)*? //mine 

Что я делаю не так?

+0

«которая в основном используя то, что рекомендации в этой должности:» Я предлагаю вам прочитать другие ответы, в частности, сравнительный и ridgerunner ответ, потому что у вас есть выбирают самый медленный путь. –

ответ

1

Вы можете использовать это негативное опережение регулярное выражение на основе:

/(\bfunction((?!function).)*\((.*?)\)\s*{)/gi 

RegEx Demo

(?!function) является негативным опережением, который будет соответствовать следующему символу, только если нет function ключевого слова. Проверьте мою демонстрацию для ваших примеров.

0

Этот подход найдет большинство объявлений функций, в том числе анонимных функций.

/\s?function(\s+\w+)?\s*\([^\)]*\)/i 

Хороший инструмент для тестирования регулярных выражений: https://regex101.com/

+1

Кажется, что не все: https://regex101.com/r/nS6bO7/1 по сравнению с https://regex101.com/r/nS6bO7/2 – Alvaro

Смежные вопросы