Javascript 从字符串中剥离标记-HTML5

Javascript 从字符串中剥离标记-HTML5,javascript,regex,html,Javascript,Regex,Html,以下字符串在HTM5中是有效的HTML,即使属性中有>: '<span src="whatever.png" data-info="hello>there">text</span>'; 几乎在使用之前,请使用: replace( /<.*?>/g, '' ) 由于属性中的>而失败 还可以选择将内容写入一个虚拟元素,然后读回textContent,但在处理大量数据时,速度非常慢 我想知道有没有人有什么建议?删除属性——或者至少在第一次遍历regex中删

以下字符串在HTM5中是有效的HTML,即使属性中有>:

'<span src="whatever.png" data-info="hello>there">text</span>';
几乎在使用之前,请使用:

replace( /<.*?>/g, '' )
由于属性中的>而失败

还可以选择将内容写入一个虚拟元素,然后读回textContent,但在处理大量数据时,速度非常慢


我想知道有没有人有什么建议?删除属性——或者至少在第一次遍历regex中删除带有匹配引号的属性值,然后在第二次遍历中删除标记,这似乎是一种可行的方法,但我不能完全理解它

我相信这个正则表达式应该适用于您的目的:

/<([^\"\'>]*|\"([^"\\]|\\.)*\"|\'([^'\\]|\\.)*\')*>/g
本质上,它匹配除“或>”之外的任何字符,或者匹配或“后跟任何字符,后跟另一个或”


只需像在原始问题-string.replace/中一样使用它,正则表达式引擎不是Lexer。它不是设计用来做这些事情的,通常在边缘情况下失败。你的只是一个例子。此外,如果你在寻找速度,regex无论如何都不是一个好办法。自己解析它。正确的答案是不要使用正则表达式。然而,取决于您的预期输入是什么,您可能能够实现它。例如,对于您的特定示例,您可以使用Jquery查找>和之间的文本,这将与$'text'.text一样简单。但是,也许你可以详细说明当你将内容写入一个虚拟元素,然后读回文本内容时,你试图做什么,你定义什么是非常慢的,什么是大量的数据?另一种方式:至少你可以将它链接到一个有一半机会的正则表达式,而不是糟糕的正则表达式。]*+\s*/?\?[\s\s]*?\?\?:!?::DOCTYPE[\S\S]*?\124;?:\[CDATA\[\S\S]*?\]\]\124;?:-[\ S\S]*?-\124?:ATTLIST[\S\S]*?\124;?:实体[\S\S]*?:元素[\S\S]*?>这不起作用。test.replace/@meagar对不起,我忘了在示例中添加全局标志。现在应该可以用了,但还是不行/g、 ;=>@meagar我再次更新了它,以考虑到转义变量,但在制作正则表达式时,它们甚至没有在我脑海中出现