-1

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

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

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

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

我的正则表达式有什么问题?这不意味着替换每个字符,包括换行符和空格,直到并包括<Section>with ---

4

2 回答 2

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 does not work for more。


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

于 2013-08-06T18:33:01.210 回答
0
arrayValues[index].replace("/[([.,\n,\s])*<Section>]/", "---");

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

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

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

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

于 2013-08-06T18:34:19.377 回答