Javascript 正则表达式在 URL 之间匹配一种以上的特殊字符

Javascript regex to match more than one type of special characters between URLs

我试图确保在字符串中只使用两种类型的特殊字符(分号、逗号或 space)。

有效案例:

例如,这应该匹配,因为它只使用一种特殊字符(分号):

https://hello.com/example1;https://hello.com.com/example2;https://hello.com.com/example3

这应该通过,因为它混合了两种允许的特殊字符(space 和分号):

https://hello.com/example1; https://hello.com.com/example2 ;https://hello.com.com/example3

这应该通过,因为它混合了两种类型的特殊字符(逗号和分号):

https://hello.com/example1; https://hello.com.com/example2 , https://hello.com.com/example3 ; https://hello.com.com/example4

这应该会失败,因为它在 URL 之间混合了两种不允许的特殊字符(逗号和分号):

https://hello.com/example1;,https://hello.com.com/example2,https://hello.com.com/example3

这是我的正则表达式:

^[A-Za-z0-9:=_\/\.\?]+(?=([,;\s])|$)(?:[A-Za-z0-9:=_\/\.\?]+)*$

目前它只允许在字符串具有一种类型的特殊字符时进行匹配,但我需要它来匹配字符串之间的多种类型,如下所示: https://regex101.com/r/i9BF6X/1

鉴于您提供的四个示例,我对问题的理解是当且仅当找不到分隔符(逗号和分号)时,才能在同一匹配项中找到分隔符(如第 3 个示例)将相同的两个 url 分开(如第 4 个示例)。

一个选项可以使用以下正则表达式:

^https:\/(\/[\w\.]+)+( *(;|,) *https:\/(\/[\w\.]+)+)+

解释:

  • ^: 字符串开始
  • https:\/(\/[\w\.]+)+: 第一个url
    • https:\/:https://
    • (\/[\w\.]+)+:斜杠序列和字母数字字符和点的组合
  • ( *(;|,) *https:\/(\/[\w\.]+)+)+:“定界符+url”的序列
    • *(;|,) *:可选空格+逗号或分号+可选空格
    • https:\/:https://
    • (\/[\w\.]+)+:斜线序列和字母数字组合
  • $: 字符串结束

试试看 here.