繁体   English   中英

替换两个字符串之间的正则表达式多个匹配项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM