Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   регулярка и динам. шаблон (https://javascript.ru/forum/misc/31934-regulyarka-i-dinam-shablon.html)

Артем125 26.09.2012 19:08

регулярка и динам. шаблон
 
Здравствуйте!

Подскажите как мне получить аналогичную функцию на js из php


function preg_replace_fix($s){
$arr = array(
'm'=>'-',
'p'=>'+',
's'=>'/'
);
foreach ($arr as $key=>$val)
{
$s = preg_replace("/{".$key."}+/i",$val,(string)$s);
}
return $s;
}


получилось типа этого, но я не знаю будет ли работать, нет ли полегче способа. Сомнения в этом месте s = s.replace('/['+Globs.key+']+/g', '@'+key+'@');
Globs =  { 
	 m:'-',
	 p:'+',
	 s:'/'
};

function preg_replace_fix(s){

if(isArray(Globs) && s)
{
	for(var key in Globs){
		s = s.replace('/['+Globs.key+']+/g', '@'+key+'@');
	}

}
return s;
}


спасибо!

oneguy 26.09.2012 19:33

Если я правильно понял задание, то надо в строке все '-', '+', '/' заменить на '@m@', '@p@', '@s@' соответственно.
В 12-й строке нужно писать Globs[key], а не Globs.key, поскольку вы обращаетесь к свойству с ключом, заданным значением переменной key, а не с самим ключом 'key'.

Артем125 26.09.2012 21:27

не работает вот эта строка s = s.replace('/['+Globs.key+']+/g', '@'+key+'@');
то есть должна быть литеральное выражение а не строка



значит необходимо из строкового представления в латеральный, как сделать ?

Aetae 26.09.2012 21:48

new RegExp('[\\\\' + Globs[key] + ']+','g')


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