Как связать 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;