如何替换<;中的所有html标记;任何事>;到\n<;任何事>\n[使用regexp(JavaScript)]
如何将所有HTML标记从如何替换<;中的所有html标记;任何事>;到\n<;任何事>\n[使用regexp(JavaScript)],javascript,regex,Javascript,Regex,如何将所有HTML标记从替换为\n和替换为\n var text = "<anything>welcome</anything><anything>Hello</anything>"; var text=“welcomeHello”; 结果 var text = "\n<anything>welcome</anything>\n\n<anything>Hello</anything>\n"; v
替换为\n
和
替换为\n
var text = "<anything>welcome</anything><anything>Hello</anything>";
var text=“welcomeHello”;
结果
var text = "\n<anything>welcome</anything>\n\n<anything>Hello</anything>\n";
var text=“\nwelcome\n\nHello\n”;
此代码将帮助您(匹配所有标记)
只是不要使用正则表达式解析HTML。请阅读以下内容:
在JavaScript中,可以使用.innerHTML
属性将HTML转换为DOM,然后可以使用其他DOM方法遍历它
简单示例(需要Firebug):
var div=document.createElement('div');
var html='foo bar
';
div.innerHTML=html;
功能扫描(节点、深度)
{
深度=深度| | 0;
var是_tag=node.nodeType==1;
var自包含=错误;
if(is_标签){
self_contained=node.childNodes.length==0;
var tag_name=node.tagName.toLowerCase();
控制台日志(“”,深度);
}否则{
console.log(node.data);
}
for(var i=0,n=node.childNodes.length;i
输出:
<div> 0
<p> 1
foo
<span> 2
bar
</span> 2
<br /> 2
</p> 1
</div> 0
0
一,
福
2.
酒吧
2.
2
1
0
您还可以修改它以输出属性并使用深度参数进行缩进。您可以在不使用正则表达式的情况下美化xml:
var text = "<anything>welcome</anything><anything>Hello</anything>";
var xml = new XML("<root>" + text + "</root>");
console.log(xml.children().toXMLString());
var text=“welcomeHello”;
var xml=newxml(“+text+”);
log(xml.children().toXMLString());
输出:
欢迎
Hello
试试这个:
str.replace(/<(\/?)[a-zA-Z]+(?:[^>"']+|"[^"]*"|'[^']*')*>/g, function($0, $1) {
return $1 === "/" ? $0+"\n" : "\n"+$0;
})
str.replace(/“]+|“[^”]*”[^']*”)*>/g,函数($0,$1){
返回$1==“/”?$0+“\n”:“\n”+$0;
})
text=text。替换(/展开@Amarghosh的答案:
假设您试图解析的HTML比您的示例(我猜是这样)更复杂,您可能希望将HTML页面转换为XHTML。这将允许您使用XML将其视为XML并执行许多操作,包括:
- 使用XSL转换数据
- 使用.NET的大量XML
用于提取和操作数据的库
我以前用一个名为的免费.NET库做过这项工作。你想对自动关闭标记做什么?为什么不能遍历DOM树并添加那些\n
?Regex不是一个很好的工具。@faressoft:你的第一个结果包括一个空行,但第二个结果没有。你想要哪个?一定要使用jQuery。它可以做各种神奇的事情,比如用正则表达式操纵xml:我认为对提问的人建议更干净的方法是个好主意,但除非明确指定,否则我们不能对上下文进行任何假设。谁知道呢?这可能是为了调试目的。让我来试试吧。我不一定同意这篇文章,但everyone应该读一下。innerHTML
不是一个方法,而是一个属性。对,谢谢。我已经使用jQuery的.html()
很久了,我都忘了。@faressoftvar text1=xml.children().toXMLString();
@Abe Ya,当字符串包含在根标记中时,应该给出一个有效的xml。
var text = "<anything>welcome</anything><anything>Hello</anything>";
var xml = new XML("<root>" + text + "</root>");
console.log(xml.children().toXMLString());
str.replace(/<(\/?)[a-zA-Z]+(?:[^>"']+|"[^"]*"|'[^']*')*>/g, function($0, $1) {
return $1 === "/" ? $0+"\n" : "\n"+$0;
})
text = text.replace(/<(?!\/)/g, "\n<"); // replace every < (which are not followed by /) by \n<