String.replace(…) test

Support for String.replace('…','…')

var foo = 'It\'s the end of the world as we know it, and I feel fine.';
var result = foo.replace('end','BEGINNING');

"It's the BEGINNING of the world as we know it, and I feel fine."

it's basic, and it works in just about every browser.

Support for String.replace(/…/,'…')

var vowels = /[aeiou]/gi;
result = foo.replace(vowels,'-');

"-t's th- -nd -f th- w-rld -s w- kn-w -t, -nd - f--l f-n-."

also well supported by browsers.

Support for String.replace(/…/,myFunction)

function Capitalize(s){
	return s.toUpperCase();
}
result = foo.replace(vowels,Capitalize);

"It's thE End Of thE wOrld As wE knOw It, And I fEEl fInE."

IEMac (5.2.2) and Safari (up to and including 1.2.2) do not support supplying a function for the second parameter. Instead .toString() is applied to the function, resulting in the raw code of the function being used in the replacement. (See Section 15.5.4.11 of the ECMAScript specification.)

Support for String.replace(/…/,myFunction), using RegExp

function Capitalize(){
	return RegExp.$1.toUpperCase()+RegExp.$2;
}
result = foo.replace(/([aeiou])([a-z])/g,Capitalize);

"It's the End Of the wOrld As we knOw It, And I fEel fIne."

In addition to the IEMac's and Safari's problem mentioned above, IEWin does not seem to populate the RegExp object when a regular expression is used inside .replace(). IEWin has major problems with this. Mozilla alone gets all four tests correct.

Support for String.replace(/…/,myFunction), using parameters

function Capitalize(orig,re1,re2){
	return re1.toUpperCase()+re2;
}
result = foo.replace(/([aeiou])([a-z])/g,Capitalize);

"It's the End Of the wOrld As we knOw It, And I fEel fIne."

IEWin gets this one right. This is the proper method that works in all browsers which support using a function as the second parameter. (Plus, it's faster than attempting to use RegExp.$x as above.)