Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.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
Javascript正则表达式匹配字符串,但仅显示文本_Javascript_Html_Regex - Fatal编程技术网

Javascript正则表达式匹配字符串,但仅显示文本

Javascript正则表达式匹配字符串,但仅显示文本,javascript,html,regex,Javascript,Html,Regex,我有一个HTML元素,里面有一个标题,如下所示。页面名称 如何创建正则表达式来搜索元素,但只返回其中的文本、页面名称?此正则表达式: /<details>(.*?)<\/details>/ $1正则表达式变量将包含名称。此正则表达式: /<details>(.*?)<\/details>/ $1 regex变量将包含名称。您不应该使用regex解析HTML。尤其是当您使用的环境为您提供了DOM解析器时。只要使用它: var docpart =

我有一个HTML元素,里面有一个标题,如下所示。页面名称

如何创建正则表达式来搜索元素,但只返回其中的文本、页面名称?

此正则表达式:

/<details>(.*?)<\/details>/
$1正则表达式变量将包含名称。

此正则表达式:

/<details>(.*?)<\/details>/

$1 regex变量将包含名称。

您不应该使用regex解析HTML。尤其是当您使用的环境为您提供了DOM解析器时。只要使用它:

var docpart = document.createElement("div"),
    details, text = '';

docpart.innerHTML = "your <details>&hellip;HTML string&hellip;</details> here";

details = docpart.getElementsByTagName("details");

if (details.length > 0) {
  text = details[0].textContent;
}

alert(text);  // "…HTML string…"
因为您在评论中提到了jQuery,所以事情变得简单了。以下是上述jQuery的等价物:

var inputHTML = "your <details>&hellip;HTML string&hellip;</details> here";
var details = $("<div>", {html: inputHTML}).find("details").text();

永远不要使用正则表达式来解析HTML。尤其是当您使用的环境为您提供了DOM解析器时。只要使用它:

var docpart = document.createElement("div"),
    details, text = '';

docpart.innerHTML = "your <details>&hellip;HTML string&hellip;</details> here";

details = docpart.getElementsByTagName("details");

if (details.length > 0) {
  text = details[0].textContent;
}

alert(text);  // "…HTML string…"
因为您在评论中提到了jQuery,所以事情变得简单了。以下是上述jQuery的等价物:

var inputHTML = "your <details>&hellip;HTML string&hellip;</details> here";
var details = $("<div>", {html: inputHTML}).find("details").text();


请详细说明一下。。。您是将HTML放在字符串中,还是它是DOM的一部分?@Felix-HTML是字符串的一部分。Im过滤内容,并使用return this.nodeType==8;返回已注释的内容;。请详细说明一下。。。您是将HTML放在字符串中,还是它是DOM的一部分?@Felix-HTML是字符串的一部分。Im过滤内容,并使用return this.nodeType==8;返回已注释的内容;。这与字符串匹配,但不删除标记。换一根绳子最容易吗?@CNOTETEGR8:放手吧。Regex不是用于此目的的合适工具。在javascript中使用类似的东西:myStr.replace/*?/,$1此匹配字符串,但不删除标记。换一根绳子最容易吗?@CNOTETEGR8:放手吧。Regex不是适合这个的工具。在javascript中使用类似的东西:myStr.replace/*?/,$1我认为这与我检索字符串的方式不匹配。我就此事向@Felix Kling发表了评论。@CNOTETEGR8:你怎么会这么想?不管字符串是否来自注释,只要试试就行了。我对Javascript非常陌生,我尝试用jQuery获取元素,如下所示,jQuery'details'。text;我没有成功。我只是假设任何实现这一点的方法都有几行代码,所以我认为正则表达式是最好的。@cnotethegre8:regex不是最好的,原因有几个。首先,它通常无法可靠地解析像HTML这样的结构化语言,除了非常非常狭窄的情况,而且您尝试覆盖的角落越多,它就越复杂,甚至无法维护。其次,它不理解像&hellip;如上所述,而在DOM中这样做可以透明地处理它们。查看我的更改答案。我认为这与我检索字符串的方式不匹配。我就此事向@Felix Kling发表了评论。@CNOTETEGR8:你怎么会这么想?不管字符串是否来自注释,只要试试就行了。我对Javascript非常陌生,我尝试用jQuery获取元素,如下所示,jQuery'details'。text;我没有成功。我只是假设任何实现这一点的方法都有几行代码,所以我认为正则表达式是最好的。@cnotethegre8:regex不是最好的,原因有几个。首先,它通常无法可靠地解析像HTML这样的结构化语言,除了非常非常狭窄的情况,而且您尝试覆盖的角落越多,它就越复杂,甚至无法维护。其次,它不理解像&hellip;如上所述,而在DOM中这样做可以透明地处理它们。请看我更改的答案。