2016-03-20 3 views
0

Я пытаюсь изменить подстроку с .replace() в javascript.

В принципе, я хочу поставить произвольный текст до и после матча.

var pattern = new RegExp("<div"+"(.*?)>", "g"); 

var text = "<div><div class='someClass'>" 

text = text.replace(pattern, "<pre>"+"<div>"+ "$1" + ">" +"</pre>") 

Код выше изменяет текст:

"<pre><div>></pre><pre><div> class='someClass'></pre>" 

Кроме того, дополнительные «>>» это правильно, но это некрасиво в функции замены.

Как я могу изменить свое регулярное выражение, так что я

  1. не должны использовать $ 1, так как он не полностью поддерживает according to this

  2. Как я могу изменить заменить на что-нибудь попроще, как

    text = text.replace(pattern, "<pre>"+ "THING_THAT_MATCHED" +"</pre>") 
    
+0

'$ 1 'в шаблоне замещающей и будет поддерживаться. –

+0

У вас есть источник для этого? – humanbeing

+0

Несомненно, [MDN String # replace()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter). Вы ошибаетесь в свойствах RegExp, таких как 'RegExp. $ 1' и backreferences внутри шаблона замены. –

ответ

1

Используйте следующий код:

var pattern = new RegExp("<div"+"(.*?)>", "g"); 

var text = "<div><div class='someClass'>" 

text = text.replace(pattern, function(match, first_match) { 
    return "<pre>"+"<div>"+ first_match + ">" +"</pre>" 
}) 

Также обратите внимание, что код делает исходный код более аккуратным, так как:

var pattern = new RegExp("<div"+"(.*?)>", "g"); 

var text = "<div><div class='someClass'>" 

text = text.replace(pattern, "<pre><div>$1></pre>") 
Смежные вопросы