Замена подстрок без регулярных выражений
Как заменить все вхождения подстроки в строке, не используя регулярные выражения?
помогите с заданием :) с рег. выражения не принял препод, не проходили. |
давай свой код, будем смотреть
|
Цитата:
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, время: 18:41. |