当前位置: 首页 > 知识库问答 >
问题:

正则表达式HTML标记javascript

郑功
2023-03-14

我想验证输入的代码是否是HTML代码(必须以<代码>

我试着这么做

var reghtml = new RegExp("(<html>*\n+</html>)");

但是我有一个问题需要在代码中做一个\n,我需要验证第一个和结束标签(=

有什么解决办法吗?


共有2个答案

黄修永
2023-03-14

给你一个图案。它检查第一层是否有有效的开始和结束标记。第一级必须有结束标记,您不能执行<代码>

var validHtml = '\
<html itemscope>\
	<head></head>\
	<body style="background: red;">\
		Everything is fine\
	</body>\
</html>\
',
	invalidHtml = '\
<html itemscope>\
	<head></foot>\
	<body>\
		Nothing is fine\
	</body>\
</html>\
',
	pattern = /^\s*<html(?:\s[^>]*)?>(?:\s*<(\w+)(?:\s[^>]+)?>(?:.|\s)*<\/\1>\s*)*<\/html>\s*$/i;
	
console.log(pattern.test(validHtml) ? 'valid' : 'invalid');
console.log(pattern.test(invalidHtml) ? 'valid' : 'invalid');
公羊安怡
2023-03-14

您不应该使用正则表达式来验证超文本标记语言(更不用说解析它了),因为超文本标记语言不是“正则语言”。

下面是一个假阴性的例子,它会导致您可以编写的任何正则表达式尝试验证HTML以将其标记为无效:

<html>
<head>
    <!-- </html> -->
</head>
<body>
    <p>This is valid HTML</p>
</body>
</html>

因为您可以在超文本标记语言(以及SGML和XML)中嵌套注释,所以您也不能为这种特殊情况编写简单的正则表达式:

<html>
<head>
    <!-- <!-- <!-- <!-- </html> -->
</head>
<body>
    <p>This is valid HTML</p>
</body>
</html>

这里有一个误报(假设您不使用regex锚):

<p>illegal element</p>
<html>
    <img>illegal text node</img>
</html>
<p>another illegal element</p>

诚然,有更强大的正则表达式实现为计数深度之类的东西增加了基本支持,但这样你就会陷入一个痛苦的世界。

验证HTML的正确方法是使用HTML DOM库。在里面NET这是HtmlAgilityPack。在基于浏览器的JavaScript中,它甚至更简单:只需使用浏览器的内置解析器(innerHTML):

(从检查HTML片段是否对Javascript有效中窃取)

function isValidHtml(html) {
    var doc = document.implementation.createHTMLDocuiment("");
    doc.documentElement.innerHTML = html;
    return ( doc.documentElement.innerHTML === html );
}

 类似资料:
  • 我有一根绳子,看起来像这样:

  • 问题内容: 我有这个HTML输入: 我想使用正则表达式删除HTML标记,以便输出为: 谁能建议使用正则表达式执行此操作? 问题答案: 您可以使用称为Jericho Html解析器的HTML解析器。 您可以从这里下载-http://jericho.htmlparser.net/docs/index.html Jericho HTML Parser是一个Java库,允许对HTML文档的各个部分(包括服

  • 问题内容: 我正在寻找一个正则表达式,可以从Java中的HTML片段中获取src(不区分大小写)标签。 问题答案: 一种可能性: 是可能的(如果不区分大小写地匹配)。这有点混乱,故意忽略了不使用引号的情况。要表示它而不必担心字符串转义: 这符合: 一个或多个不是的字符(即可能的其他属性) 可选空格 可选空格 或的起始定界符 图片来源 (可能不包含单引号或双引号) 结束定界符 尽管表达式可以在此处停

  • 我正在寻找一个正则表达式,它必须在不同类型的HTML标记之间提取文本。 对于前任: <代码> <代码> <代码> 我找到了这个特殊的片段

  • 本文向大家介绍JavaScript 正则表达式(笔记),包括了JavaScript 正则表达式(笔记)的使用技巧和注意事项,需要的朋友参考一下 一 什么是正则表达式 // 正则表达式(regular expression)是一个描述字符模式的对象; // JS定义RegExp类表示正则表达式; // String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数; 二 创

  • 问题内容: 因此,我对 正则表达式 完全 陌生 ,并且正在尝试使用Java 来查找输入字符串中的标点符号。我不知道会提前得到哪种标点符号,只是(1)!,?,。,…都是有效的标点符号,以及(2)“ <”和“>”表示特殊含义,并且不算作标点符号。该程序本身会伪随机地构建短语,我想在它经历随机过程之前先删除句子结尾处的标点符号。 我可以用任何标点符号匹配整个单词,但匹配器只为我提供该单词的索引。换一种说