在OCaml RegEx中排除特定单词

Dav*_*mes 5 regex ocaml flowtype

我用JavaScript编写了这个正则表达式:

node_modules\/(?!react\-hot).*-loader.*
Run Code Online (Sandbox Code Playgroud)

这个主意是匹配每个字符串,例如node_modules/babel-loadernode_modules/css-loader除外node_modules/react-hot-loader

这是此工作的regex101链接

(这里的上下文是我正在编写Flowtype配置文件)。

我正在尝试在OCaml中测试相同的RegEx,但未成功:

# let regexp = Str.regexp "node_modules/(?!react-hot).*-loader.*";;
val regexp : Str.regexp = <abstr>
# Str.string_match regexp "node_modules/babel-loader" 0 ;;
- : bool = false
# Str.string_match regexp "node_modules/react-hot-loader" 0 ;;
- : bool = false
Run Code Online (Sandbox Code Playgroud)

我不明白为什么该babel-loader字符串不匹配RegEx,因为正则表达式在RegEx 101中适用于JavaScript RegExes。

我了解OCaml正则表达式不遵循与JavaScript正则表达式相同的标准。但是,在这里的官方文档中阅读了有关OCaml正则表达式的信息后,我找不到任何可能导致这种行为差异的内容。

kne*_*kne 2

显然,!不是 OCaml 正则表达式中的特殊字符。所以看来您正在使用不受支持的功能。