Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 到最后一个标记(已在字符串中)RegEx_Javascript_Xml_Regex - Fatal编程技术网

Javascript 到最后一个标记(已在字符串中)RegEx

Javascript 到最后一个标记(已在字符串中)RegEx,javascript,xml,regex,Javascript,Xml,Regex,我不知道我做错了什么。我有这个字符串要替换 <?xml version="1.0" encoding="utf-8" ?> <Sections> <Section> 我正在使用正则表达式替换所有内容,包括,其余内容保持不变 arrayValues[index].replace("/[([.,\n,\s])*<Section>]/", "---"); arrayValues[index]。替换(“/[([,\n\s])*]/”,“--”

我不知道我做错了什么。我有这个字符串要替换

<?xml version="1.0" encoding="utf-8" ?>
 <Sections>
  <Section>

我正在使用正则表达式替换所有内容,包括
,其余内容保持不变

arrayValues[index].replace("/[([.,\n,\s])*<Section>]/", "---");
arrayValues[index]。替换(“/[([,\n\s])*]/”,“--”;

我的正则表达式怎么了?这难道不意味着重新拼合每个字符,包括新行和空格,直到并包括
--

首先,您需要删除正则表达式周围的引号如果它们在那里,参数将不会作为正则表达式处理。JavaScript将它视为一个字符串(因为它是一个字符串),并尝试按字面匹配它

现在已经解决了,我们可以稍微简化您的正则表达式:

arrayValues[index].replace(/[\s\S]*?<Section>/, "---");
arrayvalue[index]。替换(/[\s\s]*?/,“--”);

[\s\s]
解决了JavaScript缺少
s
标志的问题(大多数语言都支持这一方便的选项,使
能够匹配换行符)
\s
与换行符匹配(即使没有指定
s
标志),因此字符类
[\s\s]
告诉正则表达式引擎匹配:

  • \s
    -一个空白字符,可以是换行符

  • \S
    -非空白字符
因此,您可以将
[\s\s]
视为匹配的
(除换行符以外的任何字符)或文本
\n
(换行符)。更多信息,请参阅


用于使首字母
[\s\s]*
匹配非贪婪,因此正则表达式引擎在遇到第一个
时将停止

arrayValues[index]。替换(“/[([,\n\s])*]/”,“--”;
我的正则表达式怎么了

它不是正则表达式,而是字符串文字。字符串将转换为正则表达式,但您的字符串将包含斜杠。请改为使用:

arrayvalue[index]。替换(/[\S\S]*/,“--”);

而且,你有太多不必要的字符。整个过程的
[]
构建了一个角色类,这不是您想要的。捕获组
()
只是包装了一个可以自己重复的字符类。字符类中的点与文字点匹配,而不是所有字符。

@kristian,此外,正则表达式可以很好地解析html,尽管人们普遍认为。@JackThor问题不在于它不能与标记一起使用-所有带有标记的html/xml文档都只是特殊格式的字符串-问题在于字符串中这些标记的布局和格式比正则表达式所能处理的更复杂(至少,除非你的正则表达式中有数千个字符)。这只是对jobregex的错误工具。regex对于这项工作来说是一个非常好的工具。他有一些文本,并想替换其中的一些。regex在这方面会非常好地工作;事实上,这就是它的设计目的。@sgroves,regex可以帮助lex HTML,但它们不能用于正确解析HTML,因为这取决于您是否在fo中控制XML上下文并确定这一点需要将结束标记与开始标记相匹配,这不仅适用于正则表达式,甚至在使用反向引用进行扩展时也是不可行的。是的,您可以将一些东西组合在一起解决HTML子集上的特定问题,但这与解析HTML不同。我将使该类不贪婪,只使用case.正在阅读链接上发布的答案,试图将我的头绕在[\s\s]上。这与新行如何匹配?也许我应该将其作为另一个问题发布。@JackThor简短回答:因为
\s
将匹配新行(而
不会)。有关详细信息,请参阅我更新的答案。
arrayValues[index].replace("/[([.,\n,\s])*<Section>]/", "---");