网址匹配的正则表达式

时间:2019-06-16 05:38:40

标签: regex

我有两种网址:

http://somedomain/somepath/DP/vk3103s3/ref/somepath
 http://somedomain/somepath/DP/vk3103s3

并尝试对'/ DP /'到'/ ref'或URL末尾之间的路径进行数学计算(如果URL中不存在'/ ref')。在上述示例网址中,应返回字符串'vk3103s3'。

并且我尝试使用正则表达式,例如:new RegExp('/ dp /(.*)(?:/ ad | \ $)','i');
它不起作用。有人可以帮助得到它,并告诉原因...

1 个答案:

答案 0 :(得分:0)

/DP/之后,匹配除斜杠之外的所有内容:

[
  'http://somedomain/somepath/DP/vk3103s3/ref/somepath',
  'http://somedomain/somepath/DP/vk3103s3'
].forEach(str => {
  console.log(
    str.match(/\/dp\/([^/]+)/i)[1]
  );
});

(还有don't use new RegExp,除非您需要根据变量动态创建模式-您必须两次转义\。最好使用正则表达式文字)

如果/DP之间的URL可以有多个/ref分隔的部分,则类似于您现在正在做的,延迟重复和< em> lookahead (\/ref|$)。不要使用\$,因为那样会匹配文字$字符,而不是行尾:

[
  'http://somedomain/somepath/DP/vk3103s3/ref/somepath',
  'http://somedomain/somepath/DP/vk3103s3',
  'http://somedomain/somepath/DP/vk3103s3/somethingElse/ref/somepath'
].forEach(str => {
  console.log(
    str.match(/\/dp\/(.*?)(?=\/ref|$)/mi)[1]
  );
});