输入:
<div>Many</div><div>Lines</div><div>Goes</div><div>Here</div>
预期输出:
Many<br>Lines<br>Goes<br>Here
我尝试了这样的方法:
input = input.replace("<div>", ""),
input = input.replace("</div>", "<br>")
虽然这种方法有效,但解决方案并非最佳。
干杯
答案 0 :(得分:4)
使用全局正则表达式而不是字符串:
input = input.replace(/<div>/g, '');
input = input.replace(/<\/div>/g, '<br>');
console.log(input); // Many<br>Lines<br>Goes<br>Here<br>
replace()函数可以作为第一个参数:
'</div>'
/<\/div>/
无论您使用的是String还是RegExp,replace()
都会找到第一个匹配项,并替换它。 仅限第一场比赛。
您需要指定替换是全局的(即应该替换每个匹配)。
您有两个选项可以进行全局替换:
input.replace(/<\/div>/g, '<br>');
input.replace('</div>', '<br>', 'g');
String.replace方法中flags参数的使用是非标准的。不要使用此参数,而是使用带有相应标志的RegExp对象。
由于第三种参数方式不是标准,因此鼓励您使用RegExp方式。
您也可以在一行中完成:
input = input.replace(/<(\/)?div>/g, function(m, p) { return p ? '<br>' : ''; });
/*
input.replace(
/<(\/)?div>/g, -> regex to match '<div>' and '</div>'
function(m, p) { -> m = whole match, p = first capturing group
return p -> if p is defined, ie. if we've got a slash
? '<br>' -> we matched '</div>', return '<br>'
: ''; -> we matched '<div>', return ''
}
);
*/
答案 1 :(得分:2)
答案 2 :(得分:2)
尝试操纵DOM。下面的脚本将产生您所需的内容:
function insertAfter(referenceNode, newNode) {
referenceNode.parentNode.insertBefore(
newNode,
referenceNode.nextSibling);
}
var divTags = document.getElementsByTagName('div');
for (var i = 0; i < divTags.length;) {
var div = divTags[i];
var text = document.createTextNode(div.innerHTML);
div.parentNode.replaceChild(text, div);
insertAfter(text, document.createElement('br'));
}
答案 3 :(得分:1)
如果您更好地指出<div>
和</div>
之间可以包含哪种字符串,那将会有所帮助。
input = input.replace(new RegExp("<div>([a-zA-Z0-9]+)</div>", "mg"), "\$1<br>");