Regex 使用\g修饰符时的正则表达式混淆行为

Regex 使用\g修饰符时的正则表达式混淆行为,regex,Regex,我在使用正则表达式方面相当有经验,但最近我遇到了一些无法解释的问题 我试图制作一个正则表达式,它将在以下两个方面与2015\u test\u 1\u 2和test\u 1\u 2匹配。我提出了/(?!\d)([^]+)/,当我单独测试每个字符串时,它就起作用了;但是,当我同时测试两者时,使用/gm修饰符,第一次测试的2015如果不在第一行,则匹配 在第一行: 第二行: 这个例子比我解释得更好:这是因为[^\u]也匹配一个换行符 将最后一个示例文本移动到第一行或将正则表达式更改为: (?!\d

我在使用正则表达式方面相当有经验,但最近我遇到了一些无法解释的问题

我试图制作一个正则表达式,它将在以下两个方面与
2015\u test\u 1\u 2
test\u 1\u 2
匹配。我提出了
/(?!\d)([^]+)/
,当我单独测试每个字符串时,它就起作用了;但是,当我同时测试两者时,使用
/gm
修饰符,第一次测试的
2015
如果不在第一行,则匹配

在第一行:

第二行:


这个例子比我解释得更好:

这是因为
[^\u]
也匹配一个换行符

将最后一个示例文本移动到第一行或将正则表达式更改为:

(?!\d)([^_\n]+)
否则:

(?![\d\n])([^_]+)

谢谢!不过我有一个问题。即使它确实匹配了一个换行符,为什么负环视不能阻止数字匹配呢?因为下一个字符是
\n
,负环视
(?!\d)
成功,所以你也可以使用
(?![\d\n])([^\u]+)
来修复这个正则表达式。
(?!\d)([^\u]+)
也解决了它:d。谢谢你的帮助。我马上就接受。