摩纳哥编辑器未正确评估负先行正则表达式

Monaco-editor does not correctly evaluate negative-lookahead regex

我使用这个 ((?=(?!\bTODO\b)*?;).*)((?=.*?\bTODO\b).*)[^\n] 正则表达式在注释文本中查找 TODO,它是有效的 javascript 正则表达式,参见 this demo

但是当我使用

editor.getModel().findMatches("((?=(?!\bTODO\b)*?;).*)((?=.*?\bTODO\b).*)[^\s]", true, true, true, null, true);

它returns空FindMatch[]。删除负先行 ((?=.*?;).*)((?=.*?\bTODO\b).*)[^\n] 它的行为正确,但它显然匹配无效行。

是monaco-editor的bug,还是我操作不对?

您可以使用

(;.*)(\bTODO\b.*)

参见regex demo

详情

  • (;.*) - 第 1 组:一个 ; 然后除换行字符外的任何零个或多个字符,尽可能多
  • (\bTODO\b.*) - TODO 作为一个完整的单词,然后是除换行符以外的任何零个或多个字符,尽可能多。