【问题标题】:Typescript Validators Pattern RegEx Unexpected Quantifier Error in Internet Explorer, but works in Google Chrome打字稿验证器模式正则表达式在 Internet Explorer 中出现意外的量词错误,但在 Google Chrome 中有效
【发布时间】:2019-11-22 04:16:11
【问题描述】:
以下代码 sn-p 导致 Internet Explorer 抛出 Unexpected Quantifier error,但 Chrome 运行正常
sicmessage: new FormControl('', [
Validators.required, Validators.maxLength(300),
Validators.pattern(new RegExp(/(?=(?:^\w))([A-Za-z ]+)(?<=[^ ])$/))
]),
错误是:
SCRIPT5018:意外的量词
【问题讨论】:
标签:
javascript
regex
typescript
【解决方案1】:
您的模式使用lookbehind,直到 ES2018 才添加到 JavaScript。 IE11 没有也永远不会有这个功能。
如果您需要后视,您可以使用 Steven Levithan 的 XRegExp library,它支持它们(并编译为本地正则表达式)。他还有一个article,关于如何在不支持的情况下模拟lookbehind。
旁注:没有理由将正则表达式传递给RegExp 构造函数(不再是¹)。 /.../ 语法创建一个正则表达式,因此只需删除 new RegExp( 和 )。
¹“不再”-人们过去常常这样做是因为几个 JavaScript 引擎中的缓存错误,但这在几年前就已经修复了。当表达式具有全局标志时,人们有时也会使用它来重置lastIndex,但在这种情况下只做x.lastIndex = 0 的工作要少得多。你的表达式没有使用g,所以这不适用于你。