我找到并想要使用以下模式((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+)*)?
Regular expressions 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)
我实现这一点的确切方法是我在configs文件中定义了模式,然后我将其加载到控制器中,然后将其传递到{{1} }。
答案 0 :(得分: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+)*)?$
此外,我删除了所有不必要的转义:来自/
,来自-
中的[\w-]
(截至字符类的结尾/开头,-
被视为一个字面连字符),并从[...]
和[\d]
中删除了不必要的[\w]
。
请参阅regex101.com上的regex demo。