我实际上同意蒂姆的观点,即正则表达式是这里的方法。
但是,原因不是性能。这是代码的清晰度。
正则表达式的强大之处在于它们的表现力:它们如何让您以清晰简洁的方式表达模式。(当然,它们经常被严重滥用,因此这句名言暗示它们总是一件坏事。)
在这种特殊情况下,使用indexOf
并substring
最终比使用正则表达式快得多:
http://jsperf.com/replace-a-specific-part-of-a-string
作为一般规则,编写针对您的问题定制的特定逻辑几乎总是会优于使用更通用的解决方案。您摆脱了不使用的功能的包袱;这直接转化为更快的性能。(请记住,使代码更快与减少代码相同。)
在这种情况下,如果您确实想要根据这种模式替换字符串的一部分的问题的半通用解决方案,您可以编写如下函数:
function replaceBetween(haystack, left, right, replacement) {
var indexLeft = haystack.indexOf(left);
var indexRight = haystack.indexOf(right, indexLeft + left.length);
return haystack.substring(0, indexLeft) + replacement + haystack.substring(indexRight);
}
这是相对可读的。不过,我这里其实还是推荐正则表达式的方式,因为它很清楚,而且几乎可以肯定不是性能瓶颈。
(如果您要解析数百万个字符串,而这实际上是一个瓶颈,那就会改变事情。)