首页 > 解决方案 > 即使正则表达式说“如果相同的字符在后面/前面则不匹配”,字符仍然匹配

问题描述

我想匹配星号之间的单词:

This is a *test.*

这是正则表达式:

\*(.*?)\*

但如果它被两个或多个星号包围,我不想匹配这个词:

This is a **test.**

所以我更新了正则表达式以反映这一点:

(?<!\*)\*(.*?)\*(?!\*)

但是,**test**仍在匹配中。

为什么是这样?以及如何解决?

https://regexr.com/4td9l

标签: javascriptregex

解决方案


.匹配任何内容(换行符除外).*?可能包含*s - 匹配的子字符串基本上扩展为包含内部*s,而外部*s 与 s 匹配\*,因此后视和前瞻仍然得到满足。

将内部组更改为不匹配*s:

(?<!\*)\*([^*]+)\*(?!\*)
         ^^^^^^^

https://regex101.com/r/J6tUoL/1


推荐阅读