Javascript 用于文件路径的ng模式的正则表达式

Javascript 用于文件路径的ng模式的正则表达式,javascript,angularjs,regex,regex-negation,angularjs-ng-pattern,Javascript,Angularjs,Regex,Regex Negation,Angularjs Ng Pattern,我已经找到了一个具有这些条件的文件路径的正则表达式 必须匹配regex^(\\\\[^\\]+\\[^\\]+\\\[^\]+\https?:/[^/]+),因此类似于\server\share(可选后跟一个或多个“\folder”或HTTP(s)URL 不能包含任何无效的路径名字符(“,,|”) 如何在angular.js中使用满足这些条件的单个正则表达式好的,首先是正则表达式,然后是解释: (?<folderorurl>(?<folder>(\\[^\\\s",&

我已经找到了一个具有这些条件的文件路径的正则表达式

  • 必须匹配regex
    ^(\\\\[^\\]+\\[^\\]+\\\[^\]+\https?:/[^/]+)
    ,因此类似于\server\share(可选后跟一个或多个“\folder”或HTTP(s)URL
  • 不能包含任何无效的路径名字符(“,,|”)

如何在angular.js中使用满足这些条件的单个正则表达式

好的,首先是正则表达式,然后是解释:

(?<folderorurl>(?<folder>(\\[^\\\s",<>|]+)+)|(?<url>https?:\/\/[^\s]+))
目前,只有“服务器”匹配,因此我们需要预先添加反斜杠,这样“\server”将被匹配。现在,如果分解文件路径,它总是由反斜杠+somefoldername组成,因此我们需要无限次地匹配反斜杠+somefoldername(但最少一次):

按照上面的解释,这存储在名为“url”的命名组中:


现在,文件夹URL可以在
文件夹或URL
组中找到,同时仍将部分保存在
URL
文件夹中。不幸的是,我对angular.js一无所知,但正则表达式会让您开始使用。此外,请参阅此以了解工作情况。

您当前的正则表达式似乎与在你想要的时候。但是如果它正确地做了你想要的,那么这将添加否定:

^(?!.*[ "<>|])(\\\\[^\\]+\\[^\\]+|https?://[^/]+)
^(?。.*[“\\]+\\[^\\]+\\[^\\]+\\\[^\]+\\\[^\]+\\\\\[^\]+\https?://[^/]+)
在这里,我们添加了一个负前瞻,以查看字符串中是否有任何字符,这将导致匹配失败。如果找不到,则正则表达式的其余部分将继续

如果我正确理解您的需求,您可能会这样做:

^(?!.*[ "<>|])(\\\\|https?://).*$
^(?。*[“|])(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*$
这仍然不会匹配在负前瞻中定义的任何无效字符,也符合匹配一个或多个路径段以及http的条件,并且更简单

需要说明的是,如果您需要2个或更多的路径段,或者url上的尾部斜杠,那么这将不起作用

所以在这种情况下,这仍然比原来的更干净

^(?!.*[ "<>|])(\\\\[^\\]+\\.|https?://[^/]+/).*$
^(?。.*[“|])(\\\\[^\\]+\.\.\124; https?://[^/]+/)*$
还有一点。您要求匹配
\server\share
,但您的正则表达式打开时却显示
\\\
。我假设
\server\share
应该是
\\server\share
,并相应地编写正则表达式。如果不是这样,那么我给出的示例中的所有
\\\\
实例都应该更改为
\\

  • 必须匹配regex
    ^(\\\\[^\\]+\\[^\\]+\\\[^\]+\https?:/[^/]+)
    ,因此类似\\server\share的内容(可选地后跟一个或多个) “\folder”s)或HTTP(s)URL
  • 不能包含任何无效的路径名字符(“,,|”)
要在正则表达式中引入第二个条件,您主要需要在求反字符集中包含无效字符,例如,使用
[^/]
而不是
[^/“|]

下面是一个使用稍微重新排列的正则表达式的工作示例:
path=['\\server\\share',
“\\\\server\\share”,
“\\\\server\\share\\folder”,
'http://www.invalid.de',
'https://example.com',

“\\\\I认为这不起作用。((?(\[^\\\\s”,|]+)+(?https?:\/\/.+)将重复匹配无效字符。因此,当它在否定字符类中遇到<时,例如,换行括号()+使用+量词将重新开始匹配,并且在到达字符串末尾之前不会失败。这意味着它将基本上匹配以斜杠开头的任何内容。此外,它不会检查http portionregex101中的无效字符是否与
https://aas“dasd
以及
\server“\s
,虽然在以后的版本中,它只捕获到
,因此我在重复匹配语句中得到了更正,它匹配到一个无效字符。我现在明白了,这是由于开头斜杠位于组内,这使得组上的+量词看起来不必要
(\\[^\\\s",<>|]+)+
(?<folder>(\\[^\\\s",<>|]+)+)
https?:\/\/[^\s]+ # something afterwards = .+, but no whitespaces
(?<folder>(\\[^\\\s",<>|]+)+)
(?<folderorurl>(?<folder>(\\[^\\\s",<>|]+)+)|(?<url>https?:\/\/[^\s]+))
^(?!.*[ "<>|])(\\\\[^\\]+\\[^\\]+|https?://[^/]+)
^(?!.*[ "<>|])(\\\\|https?://).*$
^(?!.*[ "<>|])(\\\\[^\\]+\\.|https?://[^/]+/).*$