在JavaScript中替换字符串/字符的所有实例的最快方法是什么?while, for循环,正则表达式?


当前回答

你也可以试试:

string.split('foo').join('bar');

其他回答

你也可以试试:

string.split('foo').join('bar');

我不知道最快的是什么,但我知道最易读的是什么——最短最简单的是什么。即使它比其他溶液慢一点,也值得使用。

所以使用:

 "string".replace("a", "b");
 "string".replace(/abc?/g, "def");

享受好的代码而不是更快的速度(嗯…1/100000秒不是差)和丑陋的差。;)

@Gumbo添加额外的答案- user.email.replace(/foo/gi,"bar");

/foo/g - Refers to the all string to replace matching the case sensitive

/foo/gi - Refers to the without case sensitive and replace all For Eg: (Foo, foo, FoO, fOO)

DEMO

我认为真正的答案是,这完全取决于你的输入是什么样的。我创建了一个JsFiddle来尝试这些方法,并针对各种输入创建了自己的JsFiddle。无论我如何看待这些结果,我都看不到明显的赢家。

RegExp wasn't the fastest in any of the test cases, but it wasn't bad either. Split/Join approach seems fastest for sparse replacements. This one I wrote seems fastest for small inputs and dense replacements: function replaceAllOneCharAtATime(inSource, inToReplace, inReplaceWith) { var output=""; var firstReplaceCompareCharacter = inToReplace.charAt(0); var sourceLength = inSource.length; var replaceLengthMinusOne = inToReplace.length - 1; for(var i = 0; i < sourceLength; i++){ var currentCharacter = inSource.charAt(i); var compareIndex = i; var replaceIndex = 0; var sourceCompareCharacter = currentCharacter; var replaceCompareCharacter = firstReplaceCompareCharacter; while(true){ if(sourceCompareCharacter != replaceCompareCharacter){ output += currentCharacter; break; } if(replaceIndex >= replaceLengthMinusOne) { i+=replaceLengthMinusOne; output += inReplaceWith; //was a match break; } compareIndex++; replaceIndex++; if(i >= sourceLength){ // not a match break; } sourceCompareCharacter = inSource.charAt(compareIndex) replaceCompareCharacter = inToReplace.charAt(replaceIndex); } replaceCompareCharacter += currentCharacter; } return output; }

你可以使用以下方法:

newStr = str.replace(/[^a-z0-9]/gi, '_');

or

newStr = str.replace(/[^a-zA-Z0-9]/g, '_');

这将替换所有不是字母或数字的字符('_')。简单地更改下划线值的任何你想替换它。