如何在 Reason 中串入 matchAll?

How to String matchAll in Reason?

我正在尝试用 matchAll()

复制我在 javascript 中所做的事情
  const names = [
    ...withoutSlashes.matchAll(/(?<=Pos\. \d+ \- )(.*?)(?=","Importe)/g),
  ];

我看到 Reason 有 Js.String.match 但我找不到 matchAll。我想这是因为 matchAll 是一个较新的 ecmascript。

关于哪种方法是执行高性能 matchAll 的好方法的任何提示?还是我缺少特定的 Reason 功能?

你可以自己绑定。它最大的问题是它 returns 是一个迭代器,我们也没有绑定它。但是我们可以使用 Js.Array.array_like('a) 然后使用 Js.Array.from:

将其转换为数组
[@bs.send.pipe: string]
external matchAll: Js.Re.t => Js.Array.array_like(array(string)) = "matchAll";

let matches = "abc" |> matchAll([%re "/[a-c]/g"]) |> Js.Array.from;

基于已接受的答案,我想添加一个遵循 ReScript 约定的版本。 [@bs.send.pipe]不被鼓励,ReScript语言官方推荐pipe-first运算符(->代替|>)。

像这样:

[@bs.send]
external matchAll: (string, Js.Re.t) => Js.Array.array_like(array(string)) =
  "matchAll";

let matches: array(string) =
  matchAll("abc", [%re "/[a-c]/g"])->Js.Array.from;