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。