Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Регулярные выражения


Автор: motorway 25.7.2010, 20:27
Хочу переделать регулярку с PHP на JS, подскажите, есть ли быстрый способ это сделать, может, в JS уже есть аналог этой функции:
Код

$mas = array(
array('/(http:\/\/)(www\.|)(site1\.)(net|ru)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 5),
array('/(http:\/\/)(www\.|)(site2\.)(ru|com)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 5),
array('/(http:\/\/)(www\.|)(site3\.)(ru|com)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 5),
array('/(http:\/\/)(www\.|)(site4\.)(ru|com)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 5),
array('/(http:\/\/)(www\.|)(.*?\.|)(site5\.)(ru|net)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 6),
array('/(http:\/\/)(www\.|)(site6\.)(ru|net)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 5),
array('/(http:\/\/)(www\.|)(site7\.)(ru|com)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 5),
array('/(http:\/\/)(www\.|)(site8\.)(ru|com)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 5),
array('/(http:\/\/)(www\.|)(site9\.)(ru|net)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 5),
array('/(http:\/\/)(www\.|)(site10\.ru)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 4),
array('/(http:\/\/)(www\.|)(site11\.ru\/site12)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 4),
array('/(http:\/\/)(www\.|)(site12\.ru)(\/.*?)[\'"\n<\s\]\[]+/i', 1, 4)
);

foreach ($mas as $m)
{
$c=array();
preg_match_all($m[0], $b, $c);
};


Собственно, основное здесь - это preg_match_all, как сделать ее аналог. Или есть способ без использования регулярок? Может, можно сделать аналог на основе рассмотрения того, что делает эта регулярка? Кто-то может пояснить?

Автор: skyboy 25.7.2010, 21:52
регулярки должны быть перенесены в javascript практически без изменений.
вместо foreach можно использовать for(... in ...), либо for(i= 0; i< arr.length; i++)
Цитата(motorway @  25.7.2010,  19:27 Найти цитируемый пост)
preg_match_all, как сделать ее аналог

String.match с  ключом "g"
в чем сложность-то? не сталкивался раньше с javascript?

Автор: motorway 25.7.2010, 22:59
Скорее, не слишком шарю в регулярках. Правильно ли я понял, что они извлекают из документа все ссылки, которые начинаются с такого-то домена? Ни больше, ни меньше.
И как потом проверить, куда они поместились? var_dump($matches)?
Вот нашел пример для Яваскрипта:
Код

var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);
document.write(matches_array);

Как сюда приделать этот массив регулярок?
Насколько я понял, там в цикле сравнивается для каждой из них или как-то сразу для всех проверяет? Я к тому, что нужно ли делать здесь для regexp тоже массив или это только одна строка в каждом случае?

Автор: motorway 26.7.2010, 23:43
Ну или я могу попробовать сделать без регулярок, если кто-то подскажет, что в точности они делают здесь

Автор: skyboy 27.7.2010, 00:30
если они работают как надо, зачем тебе разбираться с их внутренним устройством? они должны работать точно так же и под js

Автор: motorway 27.7.2010, 19:47
Я пока не понял, какой код нужно написать, чтобы они работали так же. Ну и хотя бы понять смысл выполняемого ими действия

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)