打字稿如何测试正则表达式是否有效而不会出现语法错误
Typescript how to test if regex is valid without getting syntax error
我有一些代码可以从外部源加载一些正则表达式。我想测试给定的字符串是否是常规正则表达式,而不会使应用程序因语法错误而崩溃。我尝试使用 try/catch 块,但似乎最新版本的 Node 在尝试将无效表达式解析为正则表达式时会抛出语法错误,我看不到从语法错误中恢复的方法?
这是一个简单的例子:
try {
new RegExp(/?/);
} catch (error) {
console.log(error)
}
当 运行 在 Node.js 或直接在浏览器控制台中执行此操作时,catch 块将永远不会被解析,脚本就会失败。
在您的示例中,您正在从正则表达式文字创建 RegExp。编译器可能会捕捉到非法表达式,因此它甚至没有达到运行时异常的程度。
在您的解释中,您说您正在从外部源加载正则表达式字符串,因此看起来这些字符串更可能是包含正则表达式的字符串。在这种情况下,正则表达式将在运行时进行评估,您应该能够捕获异常。
在下面的代码片段中,您可以看到正则表达式是从字符串创建的(注意引号)。
编辑
请注意,从字符串创建时,不需要前缀和后缀 /
,它们用于表示正则表达式文字。
现在,在创建 RegExp 时抛出异常,“无效的正则表达式:没有什么可重复的”。
let r = undefined;
try {
r = new RegExp('?');
console.log(r.test('abc'));
}
catch (error) {
console.log('error', error.message);
}
我有一些代码可以从外部源加载一些正则表达式。我想测试给定的字符串是否是常规正则表达式,而不会使应用程序因语法错误而崩溃。我尝试使用 try/catch 块,但似乎最新版本的 Node 在尝试将无效表达式解析为正则表达式时会抛出语法错误,我看不到从语法错误中恢复的方法?
这是一个简单的例子:
try {
new RegExp(/?/);
} catch (error) {
console.log(error)
}
当 运行 在 Node.js 或直接在浏览器控制台中执行此操作时,catch 块将永远不会被解析,脚本就会失败。
在您的示例中,您正在从正则表达式文字创建 RegExp。编译器可能会捕捉到非法表达式,因此它甚至没有达到运行时异常的程度。
在您的解释中,您说您正在从外部源加载正则表达式字符串,因此看起来这些字符串更可能是包含正则表达式的字符串。在这种情况下,正则表达式将在运行时进行评估,您应该能够捕获异常。
在下面的代码片段中,您可以看到正则表达式是从字符串创建的(注意引号)。
编辑
请注意,从字符串创建时,不需要前缀和后缀 /
,它们用于表示正则表达式文字。
现在,在创建 RegExp 时抛出异常,“无效的正则表达式:没有什么可重复的”。
let r = undefined;
try {
r = new RegExp('?');
console.log(r.test('abc'));
}
catch (error) {
console.log('error', error.message);
}