Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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 匹配中间有任何标记的HTML标记_Javascript - Fatal编程技术网

Javascript 匹配中间有任何标记的HTML标记

Javascript 匹配中间有任何标记的HTML标记,javascript,Javascript,我有下面的正则表达式来匹配标记 str.match(/<xsl:template(.+?)xsl:template>/g); str.match(//g); 但问题是,若在这两个标记之间有换行符,那个么它并没有匹配任何内容。所以我以前准备过这样的绳子 str = str.replace(/(\s{2,}|\t)/g, ' ').replace(/(\r\n|\n|\r)/gm,""); str.match(/<xsl:template(.+?)xsl:template>

我有下面的正则表达式来匹配标记

str.match(/<xsl:template(.+?)xsl:template>/g);
str.match(//g);
但问题是,若在这两个标记之间有换行符,那个么它并没有匹配任何内容。所以我以前准备过这样的绳子

str = str.replace(/(\s{2,}|\t)/g, ' ').replace(/(\r\n|\n|\r)/gm,"");
str.match(/<xsl:template(.+?)xsl:template>/g); // Now it matches.
str=str.replace(/(\s{2,}|\t)/g')。replace(/(\r\n |\n |\r)/gm,”);
str.match(//g);//现在它匹配了。
我试着把它合并成一个正则表达式,如下所示

str.match(/<xsl:template(.+?|\r\n|\n|\r)xsl:template>/g);
str.match(//g);
但它不起作用。请帮助我调整这个
//g
正则表达式,以匹配标记之间的任何内容


注释中可能的重复问题不回答我的问题。

你应该真正考虑只使用XML解析器。它可以处理这一点,甚至更多(如前面所指出的)。如果不这样做,你会遇到问题。现在就把它修好

你说它不符合你的要求。是的。您想要操作XML字符串。这正是XML解析器的用途。解析它,然后操作返回的表示XML的数据结构。然后你把它倒回去


也就是说,要用这个特定的正则表达式回答这个特定问题:
与换行符不匹配。但是,
\s
会这样做(实际上是所有空白字符)。和
\S
匹配非空白字符。因此,请使用
[\s\s]
而不是

> str = "foo <xsl:template> some stuff\n in my \ntemplate</xsl:template> "
> str.match(/<xsl:template(.+?)xsl:template>/g);
null
> str.match(/<xsl:template([\s\S]+?)xsl:template>/g);
["<xsl:template> some stuff
 in my 
template</xsl:template>"]
>str=“foo一些东西\n在我的模板中”
>str.match(//g);
无效的
>str.match(//g);
[“一些东西
在我的
模板“]

> p>你应该考虑只使用XML解析器。它可以处理这一点,甚至更多(如前面所指出的)。如果不这样做,你会遇到问题。现在就把它修好

你说它不符合你的要求。是的。您想要操作XML字符串。这正是XML解析器的用途。解析它,然后操作返回的表示XML的数据结构。然后你把它倒回去


也就是说,要用这个特定的正则表达式回答这个特定问题:
与换行符不匹配。但是,
\s
会这样做(实际上是所有空白字符)。和
\S
匹配非空白字符。因此,请使用
[\s\s]
而不是

> str = "foo <xsl:template> some stuff\n in my \ntemplate</xsl:template> "
> str.match(/<xsl:template(.+?)xsl:template>/g);
null
> str.match(/<xsl:template([\s\S]+?)xsl:template>/g);
["<xsl:template> some stuff
 in my 
template</xsl:template>"]
>str=“foo一些东西\n在我的模板中”
>str.match(//g);
无效的
>str.match(//g);
[“一些东西
在我的
模板“]

如前所述,您确实不应该将html标记解析为文本,除非您能够保证格式,因为您需要涵盖所有可能性。前面的评论是正确的

但是,如果必须这样做,最简单的方法是这样做(避免使用CR/LF/whitespace/tab等):

str.match(/]*xsl:template([^>]+)xsl:template[^>]*>/g);

这依赖于html作为文本可以保证的一件事——标记以小于/大于符号开始和结束。“不贪婪”吗?不应该是必要的,因为匹配一碰到结束标记就结束。

如前所述,您确实不应该将html标记解析为文本,除非您能够保证格式,因为您需要涵盖所有可能性。前面的评论是正确的

但是,如果必须这样做,最简单的方法是这样做(避免使用CR/LF/whitespace/tab等):

str.match(/]*xsl:template([^>]+)xsl:template[^>]*>/g);

这依赖于html作为文本可以保证的一件事——标记以小于/大于符号开始和结束。“不贪婪”吗?不应该是必需的,因为匹配一到达结束标记就结束。

您尝试过使用XML解析器吗?没有,我没有尝试过。这不符合我的要求。我的实际需求是修复自定义格式的xml字符串。可能重复的@Claudiu回答说解析html标记不好,因为文本格式可以是任何格式。我的问题很直截了当,我知道字符串的格式没有问题。如果答案是这样的话,那么大多数正则表达式问题都是无效的,因此您可能需要在您的问题中添加一点关于您的情况、您的确切要求以及为什么不能使用XML解析器的内容。您声明您知道字符串没有“格式错误”,但是没有正则表达式能够正确匹配,尽管它是非常好的XSL。您是否尝试过使用XML解析器来代替它?没有,我没有尝试过。这不符合我的要求。我的实际需求是修复自定义格式的xml字符串。可能重复的@Claudiu回答说解析html标记不好,因为文本格式可以是任何格式。我的问题很直截了当,我知道字符串的格式没有问题。如果答案是这样的话,那么大多数正则表达式问题都是无效的,因此您可能需要在您的问题中添加一点关于您的情况、您的确切要求以及为什么不能使用XML解析器的内容。您声明您知道字符串没有“格式错误”,但是没有正则表达式能够正确匹配,尽管它是非常好的XSL。您已经尝试过DOMParser,但是如果中有
XSL:template
标记,它就会抛出错误it@Exception:嗯,那么您收到的是无效的XML文档。这很好,例如:
var parser=new DOMParser();parser.parseFromString(“\n在我的\n模板中有一些东西\n”
请看一下。如果您在那里看到xml文档,它是无效的,因为
xsl-template
缺少几个元素。因此,这就是为什么我要应用逻辑在孤立元素上添加xsl:template。请建议是否有更好的方法。您尝试过DOMParser,但如果有xsl:template
taginit@Exception:Hmm然后您将收到无效的XML文档。这可以正常工作,例如:
var parser=new DOMParser();parser.parseFromString(“\n在我的\n模板中\n找到一些东西”
请看一下。如果您在那里看到xml文档,它是无效的,因为只有少数元素缺少
xsl-template
。因此,我应用逻辑在孤立元素上添加xsl:template。