Created
January 17, 2016 05:30
-
-
Save lifuzu/12c7951a8d3aa4997754 to your computer and use it in GitHub Desktop.
string replace
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function str_replace (search, replace, subject, count) { | |
// http://kevin.vanzonneveld.net | |
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) | |
// + improved by: Gabriel Paderni | |
// + improved by: Philip Peterson | |
// + improved by: Simon Willison (http://simonwillison.net) | |
// + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) | |
// + bugfixed by: Anton Ongson | |
// + input by: Onno Marsman | |
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) | |
// + tweaked by: Onno Marsman | |
// + input by: Brett Zamir (http://brett-zamir.me) | |
// + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) | |
// + input by: Oleg Eremeev | |
// + improved by: Brett Zamir (http://brett-zamir.me) | |
// + bugfixed by: Oleg Eremeev | |
// % note 1: The count parameter must be passed as a string in order | |
// % note 1: to find a global variable in which the result will be given | |
// * example 1: str_replace(' ', '.', 'Kevin van Zonneveld'); | |
// * returns 1: 'Kevin.van.Zonneveld' | |
// * example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars'); | |
// * returns 2: 'hemmo, mars' | |
var i = 0, | |
j = 0, | |
temp = '', | |
repl = '', | |
sl = 0, | |
fl = 0, | |
f = [].concat(search), | |
r = [].concat(replace), | |
s = subject, | |
ra = Object.prototype.toString.call(r) === '[object Array]', | |
sa = Object.prototype.toString.call(s) === '[object Array]'; | |
s = [].concat(s); | |
if (count) { | |
this.window[count] = 0; | |
} | |
for (i = 0, sl = s.length; i < sl; i++) { | |
if (s[i] === '') { | |
continue; | |
} | |
for (j = 0, fl = f.length; j < fl; j++) { | |
temp = s[i] + ''; | |
repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0]; | |
s[i] = (temp).split(f[j]).join(repl); | |
if (count && s[i] !== temp) { | |
this.window[count] += (temp.length - s[i].length) / f[j].length; | |
} | |
} | |
} | |
return sa ? s : s[0]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment