Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Пожалуйста напишите регулярку!! (https://javascript.ru/forum/misc/24582-pozhalujjsta-napishite-regulyarku.html)

Livaanderiamarum 06.01.2012 18:08

Пожалуйста напишите регулярку!!
 
напишите регулярку чтобы возвращала Тело функции!

из "function(){alert('fff')}"

и из "function бла(){ alert('fff') }"

или как можно получить тело функции в виде текста?

например q = function (){ alert('ля ля') }

var funcBody = q.toStrong() //возвращает не только тело, а строку "function (){ alert('ля ля') }" целиком
как вернуть чисто тело "alert('ля ля')" ))?

monolithed 06.01.2012 18:25

Цитата:

Сообщение от Livaanderiamarum
toStrong()

.toString();
:nono:

alert(function () {return 0;}.toString().replace(/\s+/g, ' ').match(/function.*{(.*)}/)[1]);

Livaanderiamarum 06.01.2012 18:32

СПАСИБО ОГРОМНОЕ)!! Я реально не могу понять как регулярки работают, я уже статей 15 перечитал и справочников(

Livaanderiamarum 06.01.2012 18:40

Цитата:

Сообщение от monolithed (Сообщение 148406)
.toString();
:nono:

alert(function () {return 0;}.toString().replace(/\s+/g, ' ').match(/function.*{(.*)}/)[1]);

Подскажи лучше как из строки собрать функциональное выражение через конструктор Function() при том что у этого выражения ЕСТЬ ИМЯ?

например
var q = (function NNNNN (){}).toString().replace(/\s+/g, ' ').match(/function.*{(.*)}/)[1]
q это строка с телом функции

var func = Function(q)

так вот у func имя NNNNN не сохранится((
иными словам функция не будет доступна внутри самой себя через имя NNNNN


можно ли как то в конструктор Function() передавать не только тело функции а еще и её имя?

Livaanderiamarum 06.01.2012 18:48

хорошо, как после создания безымянной функции поменять её внутренее имя?

var q = function (){
	alert(t.name)
}
q.name = 't'
q() // t не определено

Octane 06.01.2012 19:03

Цитата:

Сообщение от Livaanderiamarum
как после создания безымянной функции поменять её внутренее имя

Свойство name доступно только для чтения, добиться его заполнения можно только при помощи function declaration и named function expression.


Цитата:

Сообщение от Livaanderiamarum
например
var q = (function NNNNN (){})…

так вот у func имя NNNNN не сохранится((

Вообще то сохранится
(function NNNNN (){ alert(arguments.callee.name) })()

(function NNNNN (){ alert(NNNNN.name) })()

alert((function NNNNN (){}).toString())

но в IE есть баги http://dmitrysoshnikov.com/ecmascrip...#nfe-i-jscript

monolithed 06.01.2012 19:11

Цитата:

Сообщение от Livaanderiamarum
Подскажи лучше как из строки собрать функциональное выражение через конструктор Function() при том что у этого выражения ЕСТЬ ИМЯ?

var fn = function () { 
    return 'foo'; 
};

var source = fn.toString().replace(/\s+/g, ' ').match(/function.*{(.*)}/)[1];

alert(Function(source)());

Для чего этот бред нужен?

Цитата:

Сообщение от Livaanderiamarum
// t не определено

подумайте почему

Livaanderiamarum 06.01.2012 19:16

Цитата:

Сообщение от monolithed (Сообщение 148414)
подумайте почему

я знаю почему)) я и показал что извне не получается), только при создании.

В том то и суть что через аргументс.кали обращаться не хочется, вдруг в функции написано обращение не через кали а через именно ИМЯ.


_____________
бред этот нужен для корвертации фукций в строку и обратно БЕЗ ПОТЕРЬ.


Часовой пояс GMT +3, время: 03:10.