2012-06-13 6 views
1

Я искал общее решение этого вопроса, но только нахожу ответы на конкретные вопросы людей.JQuery: как заменить все между определенными символами?

В принципе, я хочу знать, как правило, использует .Привернуть() для замены элементов между ними каким-либо символами в строке, например:

Заменить весь текст между ними и с учетом аЬса и хугом, например: abc text to be replaced xyz

или заменить весь текст между включительно <img and /> например: <img src="image.jpg" />

Может кто-нибудь помочь мне или указать мне в направлении хорошей ституте на это?

Спасибо! Дайте мне знать, если мне нужно уточнить больше.

ответ

3

То, что вы ищете, называется регулярными выражениями. Для получения дополнительной информации вы можете посетить сайт, например: http://www.regular-expressions.info/

Обратите внимание, что регулярные выражения не относятся к JavaScript.

Для вашего конкретного примера:

string.replace(/abc.+xyz/,"abc"+newString+"xyz"); 

. означает любой символ, а + означает одно или несколько вхождений.

Если у вас есть более одной замены делать, попробуйте:

string.replace(/abc.+?xyz/g,"abc"+newString+"xyz"); 

г обозначает вообще, а? это ленивый квантификатор, что означает, что он остановится при следующем вхождении xyz в строку.

+0

Вы, вероятно, хотите использовать ленивый квантор. – ddlshack

+0

Спасибо, Кристоф, но я не могу заставить его работать более чем однажды. Строка, которую я попробовал, имеет несколько экземпляров изображений и с использованием .replace (/ /, ""); Я смог удалить первый, но не любой другой. Следует ли это отрегулировать? – MeltingDog

+0

Для нескольких случаев я обновил ответ и включил ленивый квантификатор в предложение @ ddlshack. – Christophe

2

String.prototype.replaceBetween = function(opentag, closetag, replacement) { 
 
     var read_index = 0; 
 
     var open_index = 0; 
 
     var close_index = 0; 
 
     var output = ''; 
 

 
     while ((open_index = this.indexOf(opentag, read_index)) != -1) { 
 
     output += this.slice(read_index, open_index) + opentag; 
 
     read_index = open_index + opentag.length; 
 

 
     if ((close_index = this.indexOf(closetag, read_index)) != -1) { 
 
      if (typeof replacement === 'function') { 
 
      output += replacement(this.substring(open_index + opentag.length, close_index - 1)) + closetag; 
 
      } else { 
 
      output += replacement + closetag; 
 
      } 
 
      read_index = close_index + closetag.length; 
 
     } 
 
     } 
 

 
     output += this.slice(read_index); 
 

 
     return output 
 
    }; 
 

 
    var mydiv = document.getElementById("mydiv"); 
 
    var html = mydiv.innerHTML; 
 
    html = html.replaceBetween("<b>", "</b>", "hello"); 
 
    html = html.replaceBetween("<b>", "</b>", function(body) { 
 
     return body + ' world'; 
 
    }); 
 
    mydiv.innerHTML = html;
<div id="mydiv">The begining...<b>for</b> and <b>bar</b>... the end.</div>

Смежные вопросы