正则表达式全名优化

时间:2018-11-28 15:09:57

标签: regex angular6

问题:输入字段花费太多时间来验证输入。

延迟原因:当连续两个空格时,正则表达式验证会花费一些时间。

正则表达式:

'^(([A-Za-z]+[\-\' ]?)*([A-Za-z]+)?)+([A-Za-z]+[\-\' ]?)*([A-Za-z]+)?$'

只要输入maxLength的{​​{1}},正则表达式就允许aphostrophe(')和无限数量的单词

错误:

  

[Violation]“输入”处理程序花了26713毫秒

1 个答案:

答案 0 :(得分:3)

您嵌套的重复导致catastrophic backtracking

([A-Za-z]+[\-\' ]?)*

您可以使用unrolling the loop technique

[A-Za-z]+([\-\' ][A-Za-z]+)*

我在this blogpost

中写了类似示例的详细说明。

另一个嵌套重复位于:

(([A-Za-z]+[\-\' ]?)*([A-Za-z]+)?)+

您可以使用类似的技术对其进行优化。