1

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

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

当我给出以下代码时,我发现存在问题。我的意图是将所有 <mn+> 替换为 <mn> [< 和 m 之间没有空格]

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

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

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

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

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

4

1 回答 1

2

问题

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

  • 临时字符串1 \NE__NS_+

正则表达式可视化

显然,_最后预计会有一个或多个。

  • 临时字符串2 \<mn>+

正则表达式可视化

The\被忽略,因为它是一个转义字符。而且,它之前使用过<的不需要转义。同样,>预计会出现一次或多次。

  • 临时字符串3 \<mn>\+

正则表达式可视化

这里+转义了,表示它不是元字符,而是必须从临时字符串中匹配的加号。


解决方案

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

NE_NS\+

正则表达式可视化

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

<\smn\+>

正则表达式可视化


还有更多...

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

其次,使用Regexr针对给定的输入文本快速实时测试您的正则表达式。

于 2013-11-13T10:54:09.923 回答