我有两种网址:
http://somedomain/somepath/DP/vk3103s3/ref/somepath
http://somedomain/somepath/DP/vk3103s3
并尝试对'/ DP /'到'/ ref'或URL末尾之间的路径进行数学计算(如果URL中不存在'/ ref')。在上述示例网址中,应返回字符串'vk3103s3'。
并且我尝试使用正则表达式,例如:new RegExp('/ dp /(.*)(?:/ ad | \ $)','i');
它不起作用。有人可以帮助得到它,并告诉原因...
答案 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]
);
});