与ng模式一起使用时,有效的正则表达式模式会抛出错误



我发现并希望使用以下模式((ht|f)tp(s?)://|~/|/)?([w]+:w+@)?([a-zA-Z]{1}([w-]+.)+([w]{2,5}))(:[d]{1,5})?((/?w+/)+|/?)(w+.[w]{3,4})?((?w+=w+)?(&w+=w+)*)?

正则表达式101认为它是javascript的有效正则表达式。

然而,当我试图在ng模式中使用它时,它会抛出以下错误:

SyntaxError: Invalid regular expression: /^((ht|f)tp(s?)://|~/|/)?([w]+:w+@)?([a-zA-Z]{1}([w-]+.)+([w]{2,5}))(:[d]{1,5})?((/?w+/)+|/?)(w+.[w]{3,4})?((?w+=w+)?(&w+=w+)*)?$/: Invalid group
    at new RegExp (native)

我实现这一点的确切方式是,我在configs文件中定义了模式,然后将其加载到控制器中,从控制器将其传递到ng-pattern

要在配置中使用regex,需要将其存储为字符串。由于JS引擎将字符串视为具有转义序列的C字符串,因此转义regex元字符的反斜杠必须加倍:

^((ht|f)tps?://|~/|/)?(\w+:\w+@)?([a-zA-Z]([\w-]+\.)+(\w{2,5}‌​))(:\d{1,5})?((/‌​?\w+/)+|/?)(\w+\.\w{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?$

此外,我删除了所有不必要的转义:从/,从[w-]中的-(在字符类的末尾/开头,-被视为文字连字符),并从[d][w]中删除了不必要的[...]

请参阅regex101.com.上的regex演示

最新更新