Как связать matchAll по разуму?

Я пытаюсь воспроизвести то, что я сделал бы в javascript, с matchAll()

  const names = [
    ...withoutSlashes.matchAll(/(?<=Pos\. \d+ \- )(.*?)(?=","Importe)/g),
  ];

Я вижу, что у разума Js.String.matchно я не могу найти совпадение Я думаю, это потому, что matchAll - это более новый ecmascript.

Любой намек на то, что было бы хорошим способом провести эффективный матчВсе? или есть конкретная функция Reason, которую мне не хватает?

2 ответа

Решение

Вы можете привязать его сами. Самая большая проблема с ним в том, что он возвращает итератор, для которого у нас также нет привязок. Но мы можем использовать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;
Другие вопросы по тегам