我正在尝试用matchAll()
复制javascript中的操作
const names = [
...withoutSlashes.matchAll(/(?<=Pos. d+ - )(.*?)(?=","Importe)/g),
];
我看到Reason有Js.String.match
,但我找不到matchAll。我想这是因为matchAll是一个更新的ecmascript。
有什么提示吗?哪种方式是表演比赛的好方法?或者我缺少一个特定的Reason功能?
根据接受的答案,我想添加一个遵循ReScript约定的版本。不鼓励使用[@bs.send.pipe]
,ReScript语言正式推荐管道优先运算符(->
而不是|>
(。
像这样:
[@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;
您可以自己绑定到它。它最大的问题是它返回一个迭代器,而我们也没有绑定迭代器。但我们可以使用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;