我具有以下url / path结构。我需要一个正则表达式来匹配前两行。如果网址中存在第三条路径,则正则表达式不匹配。
有想法吗?
http://somewebsite.foo/aaa
http://somewebsite.foo/aaa/bbb
http://somewebsite.foo/aaa/bbb/ccc
答案 0 :(得分:1)
let a = 'http://somewebsite.foo/aaa'
let b = 'http://somewebsite.foo/aaa/bbb'
let c = 'http://somewebsite.foo/aaa/bbb/ccc'
let test = (input) => {
return new URL(input).pathname.split('/').length < 4
}
console.log(test(a))
console.log(test(b))
console.log(test(c))
答案 1 :(得分:0)
您获得3个匹配项,因为您的正则表达式\/aaa(\/.*|)
匹配a的3倍,并捕获一个正斜杠,然后捕获从/aaa
到字符串末尾匹配的捕获组中的任何字符。
要匹配完整的URL,可以匹配URL的开头,并使用否定的字符类[^\/]
来匹配非正斜杠,并使第二部分为可选。
^https?:\/\/[^\/]+\/[^\/]+(?:\/[^\/]+)?$
^https?:\/\/
匹配网址的开头[^\/]+\
匹配1次以上而不是正斜杠/[^\/]+
匹配第一个/
,然后不匹配/
(?:\/[^\/]+)?
这次仅再次使用相同的模式,通过使用一个非捕获组将其设为可选$
字符串的结尾或者如果应该是aaa和bbb,请使用:
^https?:\/\/[^\/]+\/aaa(?:\/bbb)?$
[
"http://somewebsite.foo/aaa",
"http://somewebsite.foo/aaa/bbb",
"http://somewebsite.foo/aaa/bbb/ccc"
].forEach(x => console.log(x + " ==> " + /^https?:\/\/[^\/]+\/[^\/]+(?:\/[^\/]+)?$/.test(x)));