我不知道我做错了什么。我有这个我要替换的字符串
<?xml version="1.0" encoding="utf-8" ?>
<Sections>
<Section>
我正在使用正则表达式替换包括<Section>
在内的所有内容,并保持其余部分不受影响。
arrayValues[index].replace("/[([.,\n,\s])*<Section>]/", "---");
我的正则表达式出了什么问题?这是否意味着重复每个字符,包括新行和空格,包括<Section>
---
和<{1}}?
答案 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>/, "---");
此外,你有太多不必要的字符。整个事物周围的[]
构建了一个字符类,这不是你想要的。捕获组()
只包装一个可以重复的字符类。字符类中的点.
与文字点匹配,而不是与所有字符匹配。