正则表达式:处理+(加号)符号

时间:2013-11-13 03:00:39

标签: regex escaping

我对正则表达式有点困惑。我在下面的示例中的意图是将所有'NE_ NS +'替换为'NE_ OS + _ OE_ NS '。当我给出下面的代码时,我认为替换结果没有任何问题

tempString1 = tempString1.replace (/\NE__NS_+/g,'NE__OS_+_OE__NS_');

当我提供以下代码时,我发现存在问题。我的意图是替换所有< MN + GT;与< MN> [之间没有空间。和m]

tempString2 = tempString2.replace (/\<mn>+/g,'<mn>');

以及上面替换的正确代码似乎是

tempString3 = tempString3.replace (/\<mn>\+/g,'<mn>');

为什么'+'与tempString1的替换示例无关,而它在tempString2示例中是相关的,并且在我根据tempString3中的代码更改它之前不会工作?

我很难理解正则表达式。任何可以帮助我理解它们的书籍/文章。我是正规表达的新手。

1 个答案:

答案 0 :(得分:2)

问题

让我们仔细看看你的各种正则表达式。你会明白发生了什么:

  • tempString1 \NE__NS_+

Regular expression visualization

显然,最终会有一个或多个_

  • tempString2 \<mn>+

Regular expression visualization

\被忽略,因为它是一个转义字符。此外,它在<之前使用,不需要转义。同样,预计会>一次或多次。

  • tempString3 \<mn>\+

Regular expression visualization

此处+已转义,表明它不是元字符,而是必须与临时字符串匹配的加号。


解决方案

总结一下,如果您想匹配NE_NS+,必须转义加号。 所以你的正则表达式将是:

NE_NS\+

Regular expression visualization

如果您想匹配< mn+>,您将使用\s来匹配空白字符(空格,制表,回车等)。同样,你必须逃避+,因为它是一个元字符。 所以,你最终得到:

<\smn\+>

Regular expression visualization


还有更多......

使用功能强大的Debuggex 可视化您的正则表达式。

其次,使用Regexr根据给定的输入文本快速测试你的正则表达式。