1

我发现并想使用以下模式((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-pattern 中使用它时,它会引发以下错误:

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)

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

4

1 回答 1

1

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

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

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

请参阅regex101.com 上的正则表达式演示

于 2015-11-25T15:35:16.157 回答