Заменить фрагмент строки - PullRequest
       4

Заменить фрагмент строки

2 голосов
/ 29 августа 2011

Это кажется абсурдно простым, но мне трудно думать о чистом способе сделать это.

Рассмотрим:

var str = "foo bar foo bar foo bar";

Я хочу заменить второй экземпляр "foo bar" (т.е. str.substring(8, 15)) произвольной строкой произвольной длины.

Ответы [ 4 ]

6 голосов
/ 29 августа 2011

Почему бы не использовать

var str = "foo bar foo bar foo bar";
str = str.substring(0, 8) + "my new string" + str.substring(15)

Вы можете даже обобщить с помощью:

   var token = "foo bar";
   var newStr = "my new string";

   var str = "foo bar foo bar foo bar";
   str = str.substring(0, token.length+1) + 
           newStr + 
           str.substring(token.length*2+1);
3 голосов
/ 29 августа 2011

Я бы предпочел использовать метод Array.splice для такого рода вещей:

var str = "foo bar foo bar foo bar".split('');
str.splice(8, 7, 'newstring');
str = str.join('');
//"foo bar newstring foo bar"

Если вы хотите использовать это повторно, добавьте его в строки:

if (!String.prototype.splice)
{
  String.prototype.splice = function(index, howmany, element){
    var arr = this.split('');
    arr.splice(index, howmany, element);
    return arr.join('');
  };
}

Конечно, это простой пример, который обрабатывает только один вставленный элемент. Splice для массивов обрабатывает несколько элементов, но в любом случае строки просто объединяются, поэтому предоставляется один элемент.

Используя этот метод, вы можете вызвать:

a = "foo bar foo bar foo bar".splice( 8, 7, 'newstring' );
//a is now 'foo bar newstring foo bar'
1 голос
/ 29 августа 2011

Вы можете использовать регулярное выражение:

"foo bar foo bar foo bar".replace(/foo bar (foo bar)/, '$1 testest'); // foo bar testtest foo bar
"notfoo notbar foo bar foo bar".replace(/foo bar (foo bar)/, '$1 testest'); // notfoo notbar foo bar testtest

или

var token = "foo bar";
var newStr = "new string";
var rg = new RegExp(token + ' (' + token + ')');
"foo bar foo bar foo bar".replace(rg, '$1 ' + newStr);
0 голосов
/ 22 ноября 2012

Я написал для него метод-прототип:

String.prototype.sliceReplace = function(start, end, repl) {
    return this.substring(0, start) + repl + this.substring(end);
};

var s = "12345678";
s.sliceReplace(2,4, "-----"); // "12-----5678"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...