Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换<;中的所有html标记;任何事>;到\n<;任何事>\n[使用regexp(JavaScript)]_Javascript_Regex - Fatal编程技术网

如何替换<;中的所有html标记;任何事>;到\n<;任何事>\n[使用regexp(JavaScript)]

如何替换<;中的所有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

如何将所有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";
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()
很久了,我都忘了。@faressoft
var 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<