到最后一个标签(已经在一个字符串中)RegEx

时间:2013-08-06 18:21:09

标签: javascript xml regex

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

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

我正在使用正则表达式替换包括<Section>在内的所有内容,并保持其余部分不受影响。

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

我的正则表达式出了什么问题?这是否意味着重复每个字符,包括新行和空格,包括<Section> ---和<{1}}?

2 个答案:

答案 0 :(得分:2)

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

既然已经处理好了,我们可以简化你的正则表达式:

arrayValues[index].replace(/[\s\S]*?<Section>/, "---");

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

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

  • \S - - 空白字符

因此,您可以将[\s\S]视为匹配.(除换行符之外的任何字符)或文字\n(换行符)。有关详情,请参阅Javascript regex multiline flag doesn't work


?用于使初始[\s\S]*匹配非贪婪,因此正则表达式引擎会在第一次出现<Section>时停止。

答案 1 :(得分:0)

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

我的正则表达式出了什么问题?

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

arrayValues[index].replace(/[\S\s]*<Section>/, "---");

此外,你有太多不必要的字符。整个事物周围的[]构建了一个字符类,这不是你想要的。捕获组()只包装一个可以重复的字符类。字符类中的点.与文字点匹配,而不是与所有字符匹配。