[英]Replace Regex Multiple Matches between two strings
我正在尝试将一些文本转换为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>
您可以通过两个步骤轻松完成此操作:
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
regex选项。
在替换函数中使用拆分/合并的方法:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.