UNPKG

phpjs

Version:

php.js offers community built php functions in javascript

65 lines (58 loc) 2.18 kB
function str_ireplace(search, replace, subject) { // From: http://phpjs.org/functions // + original by: Martijn Wieringa // + input by: penutbutterjelly // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + tweaked by: Jack // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + bugfixed by: Onno Marsman // + input by: Brett Zamir (http://brett-zamir.me) // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + bugfixed by: Philipp Lenssen // * example 1: str_ireplace('l', 'l', 'HeLLo'); // * returns 1: 'Hello' // * example 2: str_ireplace('$', 'foo', '$bar'); // * returns 2: 'foobar' var i, k = ''; var searchl = 0; var reg; var escapeRegex = function(s) { return s.replace(/([\\\^\$*+\[\]?{}.=!:(|)])/g, '\\$1'); }; search += ''; searchl = search.length; if (Object.prototype.toString.call(replace) !== '[object Array]') { replace = [replace]; if (Object.prototype.toString.call(search) === '[object Array]') { // If search is an array and replace is a string, // then this replacement string is used for every value of search while (searchl > replace.length) { replace[replace.length] = replace[0]; } } } if (Object.prototype.toString.call(search) !== '[object Array]') { search = [search]; } while (search.length > replace.length) { // If replace has fewer values than search, // then an empty string is used for the rest of replacement values replace[replace.length] = ''; } if (Object.prototype.toString.call(subject) === '[object Array]') { // If subject is an array, then the search and replace is performed // with every entry of subject , and the return value is an array as well. for (k in subject) { if (subject.hasOwnProperty(k)) { subject[k] = str_ireplace(search, replace, subject[k]); } } return subject; } searchl = search.length; for (i = 0; i < searchl; i++) { reg = new RegExp(escapeRegex(search[i]), 'gi'); subject = subject.replace(reg, replace[i]); } return subject; }