如何在 TypeScript 中使用“RegExp.exec”?

v11*_*v11 5 typescript

我想在 RegExp 中使用方法“exec”。我写下面的代码来尝试做:

let result = <RegExpExecArray>{};
while (result = expressionCheck.exec(text)) {
    let matchIndex = result.index;
    let t = result[0].length;
    matchRanges.push(new RegRange(matchIndex, t));
}
Run Code Online (Sandbox Code Playgroud)

但它会引发以下错误:

Build:Type 'RegExpExecArray | null' is not assignable to type 'RegExpExecArray'.
Run Code Online (Sandbox Code Playgroud)

我尝试将循环条件修改为:

while ((result = expressionCheck.exec(text)) != null) {
Run Code Online (Sandbox Code Playgroud)

它仍然不起作用。那么这种情况下的循环条件怎么写呢?

Alu*_*dad 6

你需要这样写:

let result;
while ((result = expression.exec(text)) !== null) {
    let matchIndex = result.index;
    let t = result[0].length;
    matchRanges.push(new RegRange(matchIndex, t));
}
Run Code Online (Sandbox Code Playgroud)

为什么原始代码不起作用:声明result为类型的原始代码RegExpExecArray。这种类型与返回类型的兼容execRegExpExecArray | null。尽管缩小, via !== null,代码仍将分配nullresult。这就是为什么它是一个错误。

您也可以按以下方式编写它。

for (let result = expression.exec(text); result !== null; result = expression.exec(text)) {
  const matchIndex = result.index;
  const t = result[0].length;
  matchRanges.push(new RegRange(matchIndex, t));
}
Run Code Online (Sandbox Code Playgroud)