Замена подстрок без регулярных выражений
Как заменить все вхождения подстроки в строке, не используя регулярные выражения?
помогите с заданием :) с рег. выражения не принял препод, не проходили. |
давай свой код, будем смотреть
|
Цитата:
function replace(source, pattern, newString) {
return source.split(pattern).join(newString);
}
alert( replace("abab", "b", "c") );
Если и это не проходили, то indexOf и slice тебе в помощь. Решение писать лень - сам разберёшься. |
|
Цитата:
function replaceSubstr(str, substr, replacer){
var s = substr.replace(/[.^$|?*+(){}\[\]\\]/g, '\\$&');
return str.replace(new RegExp(s, 'g'), replacer);
}
|
Если совсем без методов
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;
}
|
Только не str[j\i], а str.charAt(j\i) - уважайте старых осликов.
|
Цитата:
P.S. Интересно - быстрее ли http://javascript.ru/forum/misc/4815...tml#post317621 |
Demath, http://jsperf.com/replace-word-reg-vs-circle-vs-split
особой разницы нет. Если подготовить регулярку заранее думаю вообще быстрее будет. Регулярки очень хорошо оптимизированы в наше время. |
спасибо! принял препод без придирок :)
помогите с еще одним заданием: Найти и записать в массив в строке содержимое заданного тега. Тоже нужно без регулярок. |
а в учебнике по этому поводу что-то сказано?
|
Цитата:
Цитата:
Lorem <div>ipsum dolor</div> sit amet, consectetur <div>adipisicing elit</div>, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, <div>quis nostrud exercitation ullamco</div> laboris nisi ut aliquip ex ea commodo consequat. нужно записать в массив arr arr[0] = "ipsum dolor"; arr[1] = "adipisicing elit"; arr[2] = "quis nostrud exercitation ullamco". |
truten, например, так:
var string = 'Lorem <div>ipsum dolor</div> sit amet, consectetur <div>adipisicing elit</div>, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, <div>quis nostrud exercitation ullamco</div> laboris nisi ut aliquip ex ea commodo consequat.';
alert(getInnerStrings(string, "div"));
function getInnerStrings(string, tagName) {
var openTag = "<" + tagName + ">";
var closeTag = "</" + tagName + ">";
var substrings = [];
for (var position = string.indexOf(openTag); position != -1; position = string.indexOf(openTag, position)) {
position += openTag.length;
var closeTagPosition = string.indexOf(closeTag, position);
if (closeTagPosition == -1) throw new Error("parse error");
substrings.push( string.substring(position, closeTagPosition) );
position = closeTagPosition + closeTag.length;
}
return substrings;
}
|
Или так, если не проходили методы для работы со строками
var str = 'Lorem <div>ipsum dolor</div> sit amet, consectetur <div>adipisicing elit</div>, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, <div>quis nostrud exercitation ullamco</div> laboris nisi ut aliquip ex ea commodo consequat.';
alert( getTagContent(str, '<div>', '</div>').join(';\n') );
function getTagContent(str, openTag, closeTag)
{
var N = str.length, n1 = openTag.length, n2 = closeTag.length,
arr = [], L = 0;
for (var i = 0; i < N; i++)
{ var j0, j = i, k0 = i + n1, k = k0;
while (j < k0 && str.charAt(j) === openTag.charAt(j-i)) j++;
if (j === k0) j0 = j;
while (k < k0 + n2 && str.charAt(k) === closeTag.charAt(k-k0)) k++;
if (k === k0 + n2)
{ var t = '';
while (j0 < k0) t += str.charAt(j0++);
arr[L++] = t;
i += n1+n2-1;
}
}
return arr;
}
|
var arr =[],
div = document.createElement('div');
div.innerHTML = 'Lorem <div>ipsum dolor</div> sit amet, consectetur <div>adipisicing elit</div>, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, <div>quis nostrud exercitation ullamco</div> laboris nisi ut aliquip ex ea commodo consequat.';
[].forEach.call(div.querySelectorAll('div'), function(el) {
arr.push(el.innerHTML);
});
console.log(arr);
с уважением к старым осликам:
var arr =[],
temp,
div = document.createElement('div');
div.innerHTML = 'Lorem <div>ipsum dolor</div> sit amet, consectetur <div>adipisicing elit</div>, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, <div>quis nostrud exercitation ullamco</div> laboris nisi ut aliquip ex ea commodo consequat.';
temp = div.getElementsByTagName('div');
for (var i = 0; i < temp.length; i++) {
arr.push(temp[i].innerHTML);
}
console.log(arr);
|
| Часовой пояс GMT +3, время: 02:13. |