![]() |
|
||||||||||
|
|||||
|
Написал парсинг для JavaScript - конструкции с последующей отправкой по ExternalInterface:
public static function getJavaScript (baseUrl:String):Array // возвращаем массив Fn, arg1, arg2, arg3 { if (baseUrl.indexOf('javascript:') != -1) { var js:String = baseUrl.split('javascript:')[1]; var fn:String = js.substr(0, js.indexOf('(', 0)).split(' ').join(''); // имя ф-ции без лишних пробелов var args:Array = js.substr(js.indexOf('(', 0)+1, js.indexOf(')', 0) - js.indexOf('(', 0) - 1).split(','); // массив аргументов for (var a:uint = 0; a < args.length; a++) // чистим аргументы от ненужных кавычек { var quotes:String = '"'; // смотрим в какие кавычки засунута строка if (args[a].lastIndexOf("'") > args[a].lastIndexOf('"')) quotes = "'"; if (args[a].indexOf(quotes) != -1) args[a] = args[a].substr(args[a].indexOf(quotes, 0)+1, args[a].lastIndexOf(quotes) - args[a].indexOf(quotes, 0) - 1); // выделяем строку между соотв. кавычками } args.unshift(fn); // добавляем в массив имя ф-ции return args; } return []; } Скрипт работает, но какой-то не красивый
__________________
Счастье - это хорошее здоровье и плохая память |
|
|||||
|
я бы разбил по частям данный код, отдельную функцию на парсинг функции отдельно аргументов. Так легче потом модифицировать код, да и читается легче.
кст. а почему не регулярными выражениями? |
|
|||||
|
Цитата:
__________________
Счастье - это хорошее здоровье и плохая память |
|
|||||
|
знаешь, тут дело практики, я научился на онлайн инструментах. погугли, выбери по вкусу, их дофига... и методом русского тыка и с поддержкой мануала можешь понять все бенефиты регулярных выражений
могу помочь в конкретном регулярном выражении, напиши что хочешь найти и я в ответ напишу регулярное |
|
|||||
|
Ну в принципе все по тексту:
1) взять строку до первой "(" и убрать лишние пробелы 2) взять строку между первой "(" и последней ")" 3) проверить какой последний символ: " (двойная кавычка), ' (одинарная), х (не кавычка)
__________________
Счастье - это хорошее здоровье и плохая память Последний раз редактировалось _sestra_; 04.05.2011 в 14:04. |
|
|||||
|
Цитата:
регулярные выражение несколько иначе нужно рассматривать, это в цыкле вы идете до первого вхождения и чтот с этим вхождением делаем.... а в регулярном выражении мы четко знаем что нам искать пример: название функции , список аргументов, тело функции вот тут уже больше конретики только нужно уточнение есть ли скобки между скобками? Добавлено через 17 минут (незабываем про ключи) Вот регулярное выражение на парсирование простых фукций оно работает для но! это са-амый простой его вариант так как тут не учитывается что в теле функции будет много всякого кода Добавлено через 19 минут мой любимый тестер http://gskinner.com/RegExr/ Последний раз редактировалось cremnet; 04.05.2011 в 14:23. |
|
|||||
|
Modus ponens
|
А в чем смысл задумки? Почему сразу не передать?
ЗЫ: 3) взять строку между первой Регулярными выражениями проблема сбалансированных скобок не решается впринципе. Чтобы понять о чем речь: function foo(){ return "(parens((:-)".replace(/\((.)"/g; }
foo((a + b).toString(isNaN(b / a) + 8))).charAt(":(((((".indexOf("("));
//
![]()
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 04.05.2011 в 14:52. |
|
|||||
|
Конечно такой код куда проще:
Но, под некоторыми браузерами при таком запросе открывается новая вкладка. Например в Firefox. Конечно, это проблема, скорее, не скрипта а браузера/плагина. Если вы знаете как это исправить, был бы счастлив.
__________________
Счастье - это хорошее здоровье и плохая память Последний раз редактировалось _sestra_; 04.05.2011 в 16:10. |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|