我正在尝试将一些文本转换为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 :(得分: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]
,以模拟JS遗憾缺少的s
正则表达式选项。
答案 1 :(得分:0)
在替换函数中使用split / join的方法:
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);