change of interface: replaceFn should always return a string. to avoid replacement, just return the src.