匹配字符串模式和数字的正则表达式(url格式)

时间:2017-11-05 19:59:28

标签: javascript regex google-form

我有一个跟随此网址格式的字符串

https://www.examples.org/activity-group/8712/activity/202803
// note :  the end ending of the url can be different
https://www.examples.org/activity-group/8712/activity/202803‌​?ref=bla
https://www.examples.org/activity-group/8712/activity/202803‌​/something

我正在尝试编写匹配

的正则表达式
https://www.examples.org/activity-group/{number}/activity/{number}*

{number} 是一个长度为1到10的整数。

如何定义检查字符串模式的正则表达式并检查数字是否在字符串中的正确位置?

背景:在Google表单中,为了验证答案,我想强制人们以这种格式输入网址。因此使用这个正则表达式。

对于不匹配该格式的Url,正则表达式应返回false。例如:https://www.notthesite.org/group/8712/activity/astring

我经历了几个例子,但只有当字符串中存在数字时它们才匹配。

示例来源:

3 个答案:

答案 0 :(得分:1)

issubclass

  • ^https:\/\/www\.examples\.org\/activity-group\/[0-9]{1,10}\/activity\/[0-9]{1,10}(\/[a-z]+)*((\?[a-z]+=[a-zA-Z0-9]+)(\&[a-z]+=[a-zA-Z0-9]+)*)*$ - 字符串开头
  • ^ - 转义字符
  • \ - 数字
  • [0-9] - 前一项和十项之间
  • {1,10} - 允许其他网址
  • (\/[a-z]+)* - 使用((\?[a-z]+=[a-zA-Z0-9]+)(\&[a-z]+=[a-zA-Z0-9]+)*)*允许查询参数包含第一个参数,使用?包含所有其他参数
  • & - 字符串结尾

这假设URL段和查询参数键仅为小写字母。查询参数值可以是小写字母,大写字母或数字。

答案 1 :(得分:1)

您可以使用

https?:\/\/(?:[^/]+\/){2}(\d+)\/[^/]+\/(\d+)

a demo on regex101.com

<小时/> 细分,这说:

https?:\/\/     # http:// or https://
(?:[^/]+\/){2}  # not "/", followed by "/", twice
(\d+)           # 1+ digits
\/[^/]+\/       # same pattern as above
(\d+)           # the other number

您需要分别使用群组12

<小时/> 如果这太过宽松,请使用

https:\/\/[^/]+\/activity-group\/(\d+)\/activity\/(\d+)

哪些内容

https:\/\/[^/]+     # https:// + some domain name
\/activity-group\/  # /activity-group/
(\d+)               # first number
\/activity\/        # /activity/
(\d+)               # second number

查看另一个demo on regex101.com

答案 2 :(得分:0)

可能你需要这样的东西:

(http[s]?:\/\/)?www.examples.org\/activity-group\/(\d{1,10})\/activity\/(\d{1,10})([\S]+?)$

其中:

  • (http[s]?:\/\/)?匹配任何 http:// https:// 部分。
  • www.examples.org是您的域名。
  • (\d{1,10})将匹配第一个整数,最大len为10(在 activity-group 之后)。
  • 第二个(\d{1,10})将匹配活动之后的第二个整数。
  • 最后([\S]+?)$将匹配第二个数字后的任何可选数据,直到找到新行,假设您使用带有\m的多行标记。

http://regexr.com/3h448

上查看

希望它有所帮助!