Я фактически agree with Tim, что регулярное выражение - путь сюда.
Однако причина - не производительность. Это четкость кода.
Сила регулярных выражений - это их выразительность :: как они позволяют выражать шаблоны ясным и сжатым способом. (Конечно, они часто ужасно ругали, поэтому the famous quote подразумевающие они всегда плохо.)
В данном конкретном случае использование indexOf
и substring
заканчивают тем, что намного быстрее, чем с помощью регулярных выражений:
http://jsperf.com/replace-a-specific-part-of-a-string
Как правило, писать свою собственную специфическую логику, которая специально с учетом вашей проблемы почти всегда будет опережать использовать более общее решение. Вы освобождаете багаж от функциональности, которую вы не используете; что напрямую переводит на более высокую производительность. (. Помните, что making code faster is the same as making it do less)
В этом случае, если вы действительно хотели пол-общего решения проблемы замены части строки в соответствии с этим рисунком, вы могли бы написать такую функцию:
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);
}
Это относительно читаемо. Однако, опять же, я действительно рекомендую подход к регулярному выражению здесь, потому что это понятно, и это почти наверняка не является узким местом производительности.
(. Если вы разбираете миллионы строк, и это на самом деле является узким местом, которое изменяет вещи)
Если вы заинтересованы, чтобы найти метод _fastest_ [jsperf.com] (HTTP: // JSPerf .com) - отличное место для экспериментов. – MikeM