var url1 = 'dominName/profilePics/'
var url2 = 'dominName/profilePics/12345.jpg'
我想比较以上两个网址。如果/profilePics/
之后有任何字符串,则应返回true
值。
我使用正则表达式(RegExp),但无法获取解决方案。
那么你能帮我这个忙吗?
答案 0 :(得分:1)
使用RegExp
并使用以下字符串创建正则表达式模式:
var myReg = new RegExp('^' + url1 + '.+');
^
:匹配输入的开头.+
:匹配任何内容(长度> 0)
var url1 = 'dominName/profilePics/';
var url2 = 'dominName/profilePics/12345.jpg';
var escapeReg = url1.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
var myReg = new RegExp('^' + escapeReg + '.+');
console.log(myReg.test(url1)); //false
console.log(myReg.test(url2)); //true
答案 1 :(得分:1)
var url1 = 'dominName/profilePics/';
var url2 = 'dominName/profilePics/12345.jpg';
/dominName\/profilePics\/[0-9]+\.jpg$/.test(url1);
/dominName\/profilePics\/[0-9]+\.jpg$/.test(url2);
答案 2 :(得分:0)
您可以使用.substring
方法获取域名后面的字符串部分的长度:
const checkURL = url => {
return Boolean(url.substring('dominName/profilePics/'.length));
}
console.log(
checkURL('dominName/profilePics/') // false
)
console.log(
checkURL('dominName/profilePics/12345.jpg') // true
)
答案 3 :(得分:0)
如果我从更一般的意义上正确地理解了您的问题,那就是要查找路径是否嵌套在另一个路径(是子树)中。由于您不希望解决方案特定于所提供的url字符串,因此此IMO是正确的处理方法,因为将来它们可能会更改。
建议的解决方案:
非正则表达式解决方案:确保url1
以给定的基本网址(url2
)开头,并检查在'/'
上拆分后,是否有url1
大于基本网址。
const isNested = (url1, url2) => {
return url1.indexOf(url2) === 0 &&
url1.split("/").length > url2.split("/").length
}
> isNested('a/b/c', 'a/b')
true
> isNested('a/b/cd', 'a/b')
true
> isNested('x/b/cd', 'a/b')
false
> isNested('a/b/cd', 'x/a/b')
false
> isNested('a/b/cd/z', 'x/a/b')
false
> isNested('a/b/cd/z', 'a/b')
true
我们可以添加一个深度参数来测试特定深度
const isNested = (url1, url2, depth) => {
url1.indexOf(url2) === 0 && depth
? url1.split("/").length - url2.split("/").length === depth
: url1.split("/").length > url2.split("/").length
}
> isNested('a/b/cd/z', 'a/b')
true
> isNested('a/b/cd/z', 'a/b', 1)
false
> isNested('a/b/cd/z', 'a/b', 2)
true
正则表达式解决方案:不推荐使用,因为它难以阅读和修改。
const isNested = (url1, url2) => {
let escaped = url2.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
let regex = new RegExp(`(^${escaped})(\/[\/a-zA-Z0-9_-]+)`, "gm")
return url1.match(regex) ? true : false
}
> isNested('a/b/c/d', 'a/b/c')
true
> isNested('a/b/c', 'a/b/c')
false
> isNested('a/b/c/de', 'a/b/c')
true
> isNested('a/b/c/de/fg', 'a/b/c')
true
> isNested('x/a/b/c/de/fg', 'a/b/c')
false
答案 4 :(得分:-1)
const checkURL = (url) => {
return Boolean(url.substring(url.lastIndexOf('/')+1));
}
console.log(
checkURL('dominName/profilePics/') // false
)
console.log(
checkURL('dominName/profilePics/12345.jpg') // true
)