Javascript 正则表达式在 URL 之间匹配一种以上的特殊字符
Javascript regex to match more than one type of special characters between URLs
我试图确保在字符串中只使用两种类型的特殊字符(分号、逗号或 space)。
有效案例:
- 可以包含字母数字字母和数字
- 可以包含特殊字符 : / .
- 分隔 URL 时最多可以包含两种类型的特殊字符:分号、逗号、space 和分号或 space 和逗号。
- 分隔时不能混用特殊字符分号和逗号URLs
例如,这应该匹配,因为它只使用一种特殊字符(分号):
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.
我试图确保在字符串中只使用两种类型的特殊字符(分号、逗号或 space)。
有效案例:
- 可以包含字母数字字母和数字
- 可以包含特殊字符 : / .
- 分隔 URL 时最多可以包含两种类型的特殊字符:分号、逗号、space 和分号或 space 和逗号。
- 分隔时不能混用特殊字符分号和逗号URLs
例如,这应该匹配,因为它只使用一种特殊字符(分号):
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\.]+)+
: 第一个urlhttps:\/
:https://(\/[\w\.]+)+
:斜杠序列和字母数字字符和点的组合
( *(;|,) *https:\/(\/[\w\.]+)+)+
:“定界符+url”的序列*(;|,) *
:可选空格+逗号或分号+可选空格https:\/
:https://(\/[\w\.]+)+
:斜线序列和字母数字组合
$
: 字符串结束
试试看 here.