Javascript 这个负前瞻正则表达式模式意味着什么?

Javascript 这个负前瞻正则表达式模式意味着什么?,javascript,regex,regex-lookarounds,regex-negation,Javascript,Regex,Regex Lookarounds,Regex Negation,在分析用户输入命令的一段代码中,我一直看到以下正则表达式模式: const CopyPattern = /^COPY-((?!COPY-).)*$/; const CutPattern = /^CUT-((?!CUT-).)*$/; const PastePattern = /^PASTE-((?!PASTE-).)*$/; ... 为什么有人会跟着X走((?!X)。* 我的正则表达式技能可能会更强,一般来说,前瞻/落后是一个我还没有很好掌握的话题。这种模式的作用是什么,它将匹配什么,为什么使

在分析用户输入命令的一段代码中,我一直看到以下正则表达式模式:

const CopyPattern = /^COPY-((?!COPY-).)*$/;
const CutPattern = /^CUT-((?!CUT-).)*$/;
const PastePattern = /^PASTE-((?!PASTE-).)*$/;
...
为什么有人会跟着
X
((?!X)。*


我的正则表达式技能可能会更强,一般来说,前瞻/落后是一个我还没有很好掌握的话题。这种模式的作用是什么,它将匹配什么,为什么使用
^X-(?!X-)*$
而不是
^X-(.*)$

采用以下模式:

^COPY-((?!COPY-)*$
此图案使用回火点,表示要匹配:

^从输入开始
副本-文本“副本…”
((?!COPY-)*然后匹配任何单个字符,前提是我们可以向前看
不要再越过文本“复制-”
$输入结束

因此,调和点的工作原理是使用负前瞻,以确保我们匹配
*
,而不跨越某些内容,在这种情况下,文本
复制-

是否尝试使用?
((!COPY-)*
通常称为调和点,并将匹配与
*
相同的内容,但不跨越文本
复制-
@WaisKamal是的,它解释了匹配的内容,但没有解释why@TimBiegeleisen仅仅使用“回火”这个词就给了我一些东西给谷歌,所以谢谢你!介意把它扩展成一个答案吗?@WantonBarnacles——我支持regex101的建议!如果你花任何时间和Regex一起工作,那真是天赐良机,绝对值得收藏!