2014-08-19 3 views
0

Я пытаюсь превратить некоторый текст в html, но мне не удается создать таблицу. Каждая ячейка окружена скобками [].Заменить регулярные выражения между двумя строками

У меня уже есть строки установить:

<tr>[blue][red][yellow][purple][white]</tr> 

Теперь мне нужно заменить превратить каждую клетку в <td>.

Это будет работать нормально:

.replace(/\[(.*?)\]/g,'<td>$1</td>') 

, но я не хочу, чтобы это произошло в других частях документа, только тогда, когда это между тегами.

Это имеет смысл для меня, но просто не работает:

.replace(/(<tr>.*?)\[(.*?)\](.*?\<\/tr\>)/g,'$1<td>$2</td>$3') 

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

alert('<tr>[blue][red][yellow][purple][white]</tr>'.replace(/(<tr>.*?)\[(.*?)\](.*?\<\/tr\>)/g,'$1<td>$2</td>$3')); 

выводит:

<tr><td>blue</td>[red][yellow][purple][white]</tr> 

ожидаемый результат:

<tr><td>blue</td><td>red</td><td>yellow</td><td>purple</td><td>white</td></tr> 
+0

, что ожидается выход? Это последний? – Braj

+0

Извините, должен был включить это, отредактировано. – stackers

+2

Вам лучше пройти HTML-код, регулярно найти tr, а затем применить подстановку (к их контенту). Поиск всей вещи для определенных тегов с регулярным выражением будет проблемой – sidyll

ответ

0

Вы можете легко сделать это в два этапа:

var str = "<div>[do not replace]</div><table><tr>[blue][red][yellow][purple][white]</tr></table>"; 

str = str.replace(/(<tr[\s\S]*?>)([\s\S]*?)(<\/tr>)/g, function(m, start, contents, end) { 
    return start + contents.replace(/\[([\s\S]*?)\]/g, "<td>$1</td>") + end; 
}); 

alert(str); 

Обратите внимание, что я заменил, что должно было . с [\s\S] для имитации опции s регулярок, что JS, к сожалению, не хватает.

0

Способ, который используют раскол/присоединиться к функции замены:

var str = '<tr>[blue][red][yellow][purple][white]</tr>'; 

var res = str.replace(/<tr>(?:\[[^\]]*\])+<\/tr>/g, 
    function (m) { 
     return '<tr><td>' 
      + m.substring(5, m.length-6).split('][').join('</td><td>') 
      + '</td><tr>'; 
    }); 

console.log(res); 
Смежные вопросы