|
|
|
| Хочу написать функцию замены всех подстрок в строке. Вот что получилось.
<html>
<head>
<title>StrReplace</title>
<script>
function StrReplace(p1,p2,s) {
if (p1==p2) return s;
while (s.indexOf(p1)>=0) s=s.replace(p1,p2);
return s;
}
</script>
</head>
<body>
<script>
var s='RRR';
document.write(StrReplace('R','-P-',s)); // Вот так работает
document.write(StrReplace('R','-R-',s)); // А вот так зацикливается
</script>
</body>
</html>
|
Что исправить чтобы работало ВСЕГДА ? | |
|
|
|
|
|
|
|
для: ExtraBrain
(09.01.2007 в 14:58)
| | Чего бы ему не зацикливаться, если при таком действии всегда будет s.indexOf(p1)>=0 во 2-м случае?
если надо заменить все R на "-R-", то делают не так. Вместо
while (s.indexOf(p1)>=0) s=s.replace(p1,p2);return s;
пишут
return s.replace(new RegExp(p1,'g'),p2);
(Читайте http://javascript.aho.ru/files/js/RegExpJS.html про new RegExp(,). ) | |
|
|
|
|
|
|
|
для: 12345
(09.01.2007 в 15:16)
| | Сделал как Вы сказали
<html>
<head>
<title>StrReplace</title>
<script>
function StrReplace(p1,p2,s) {
return s.replace(RegExp(p1,'g'),p2);
}
</script>
</head>
<body>
<script>
var s1='4RRR';
document.write(StrReplace('4R','R',s1),'<br>'); // Это работает
var s2='*FFF';
document.write(StrReplace('*F','F',s2),'<br>'); // А это ничего не выводит.
</script>
</body>
</html>
|
Хотелось бы получить универсальную функцию, чтобы ВСЁ заменяла. | |
|
|
|
|
|
|
|
для: ExtraBrain
(09.01.2007 в 15:57)
| | Дело в том, что Вы в параметре p1 используете текст регулярного выражения, следовательно, надо "уважать законы". Смотрите в описании, что означает знак "*" - это специальный символ. (Чтобы его экранировать, пишем "\*F".)
Если уж серьёзно так важно, чтобы не действовали спецсимволы, напишите функцию вставки перед ними (список из того же описания) знаков "\". | |
|
|
|
|
|
|
|
для: 12345
(09.01.2007 в 17:25)
| | Спасибо за помощь но не сложилось у меня с RegExp, никогда не догонял этих регулярных выражениёв :-)
Вот что получилось без них:
<html>
<head>
<title>StrReplace</title>
<script>
function StrReplace(p1,p2,s) {
var i,s1='';
var lp1=p1.length;
var ls=s.length;
if (s=='' && p1=='') return p2;
if (s=='' && p1!='') return s;
if (s!='' && p1=='') return s;
if (p1==p2) return s;
if (s.indexOf(p1)<0) return s;
while (1==1) {
i = s.indexOf(p1);
if (i>=0) {
if (i>0) s1+=s.substring(0,i);
s1+=p2;
s=s.substring(i+lp1,ls);
if (s=='') return s1;
}
else {
s1+=s;
return s1;
}
}
}
</script>
</head>
<body>
<script>
s='[+*/-ju 777 j*]';
document.write(s,'<br>');
document.write(StrReplace('ju','RaR',s),'<br>');
</script>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: ExtraBrain
(09.01.2007 в 17:32)
| | А никто не говорил, что это просто :) | |
|
|
|