我对正则表达式有点困惑。我在下面的示例中的意图是将所有'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中的代码更改它之前不会工作?
我很难理解正则表达式。任何可以帮助我理解它们的书籍/文章。我是正规表达的新手。
答案 0 :(得分:2)
让我们仔细看看你的各种正则表达式。你会明白发生了什么:
\NE__NS_+
显然,最终会有一个或多个_
。
\<mn>+
\
被忽略,因为它是一个转义字符。此外,它在<
之前使用,不需要转义。同样,预计会>
一次或多次。
\<mn>\+
此处+
已转义,表明它不是元字符,而是必须与临时字符串匹配的加号。
总结一下,如果您想匹配NE_NS+
,必须转义加号。
所以你的正则表达式将是:
NE_NS\+
如果您想匹配< mn+>
,您将使用\s
来匹配空白字符(空格,制表,回车等)。同样,你必须逃避+
,因为它是一个元字符。
所以,你最终得到:
<\smn\+>
使用功能强大的Debuggex 可视化您的正则表达式。
其次,使用Regexr根据给定的输入文本快速测试你的正则表达式。