Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена подстрок без регулярных выражений (https://javascript.ru/forum/misc/48158-zamena-podstrok-bez-regulyarnykh-vyrazhenijj.html)

truten 22.06.2014 12:22

Замена подстрок без регулярных выражений
 
Как заменить все вхождения подстроки в строке, не используя регулярные выражения?
помогите с заданием :) с рег. выражения не принял препод, не проходили.

skrudjmakdak 22.06.2014 12:26

давай свой код, будем смотреть

Sweet 22.06.2014 12:45

Цитата:

Сообщение от truten
не проходили

А что проходили? Проще всего с помощью метода .split:
function replace(source, pattern, newString) {
  return source.split(pattern).join(newString);
}

alert( replace("abab", "b", "c") );

Если и это не проходили, то indexOf и slice тебе в помощь. Решение писать лень - сам разберёшься.

Aetae 22.06.2014 13:04

Цитата:

Сообщение от Sweet (Сообщение 317621)
Если и это не проходили, то indexOf и slice тебе в помощь.

А в самом крайнем случае есть ещё .charAt().=)

truten 22.06.2014 13:08

Цитата:

Сообщение от skrudjmakdak
давай свой код, будем смотреть

получилось только с рег. выражениями, а препод из-за них не принимает

function replaceSubstr(str, substr, replacer){
	
    var s = substr.replace(/[.^$|?*+(){}\[\]\\]/g, '\\$&');
    return str.replace(new RegExp(s, 'g'), replacer);
}

Demath 22.06.2014 13:23

Если совсем без методов

function replaceSubStr(str, subStr, replacer)
{
    var newStr = '', n = subStr.length, N = str.length;

    for (var i = 0; i < N; i++)
    {  var j = i;
       while (j < i+n && str[j] === subStr[j-i]) j++;
       if (j === i+n)
       {  newStr += replacer;
          i += n-1;
       }
       else newStr += str[i];
    }
    
    return newStr;
}

Aetae 22.06.2014 13:30

Только не str[j\i], а str.charAt(j\i) - уважайте старых осликов.

Demath 22.06.2014 13:41

Цитата:

Сообщение от Aetae
Только не str[j\i], а str.charAt(j\i) - уважайте старых осликов.

Конечно. Куда ж без осла :-/

P.S. Интересно - быстрее ли http://javascript.ru/forum/misc/4815...tml#post317621

Aetae 22.06.2014 14:39

Demath, http://jsperf.com/replace-word-reg-vs-circle-vs-split
особой разницы нет. Если подготовить регулярку заранее думаю вообще быстрее будет. Регулярки очень хорошо оптимизированы в наше время.

truten 24.06.2014 13:39

спасибо! принял препод без придирок :)

помогите с еще одним заданием:
Найти и записать в массив в строке содержимое заданного тега.

Тоже нужно без регулярок.


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