Javascript 如何比较js中的两个字符串
我想比较以上两个网址。如果在Javascript 如何比较js中的两个字符串,javascript,node.js,regex,Javascript,Node.js,Regex,我想比较以上两个网址。如果在/profilePics/之后出现任何字符串,则它应返回true值 我正在使用正则表达式(RegExp),但无法获得解决方案 因此,您可以帮我解决这个问题。您可以使用该方法获取域名后字符串部分的长度: const checkURL=url=>{ 返回布尔值(url.substring('dominName/profilePics/'.length)); } console.log( checkURL('dominName/profilePics/')//false
/profilePics/
之后出现任何字符串,则它应返回true
值
我正在使用正则表达式(RegExp),但无法获得解决方案
因此,您可以帮我解决这个问题。您可以使用该方法获取域名后字符串部分的长度:
const checkURL=url=>{
返回布尔值(url.substring('dominName/profilePics/'.length));
}
console.log(
checkURL('dominName/profilePics/')//false
)
console.log(
checkURL('dominName/profilePics/12345.jpg')//true
)
const checkURL=(url)=>{
返回布尔值(url.substring(url.lastIndexOf('/')+1));
}
console.log(
checkURL('dominName/profilePics/')//false
)
console.log(
checkURL('dominName/profilePics/12345.jpg')//true
)
如果我在更一般的意义上正确地理解了您的问题,那就是找到一条路径是否嵌套在另一条路径(是子树)中。此IMO将是正确的方法,因为您不希望您的解决方案特定于提供的url字符串,因为它们将来可能会更改
提议的解决办法:
非正则表达式解决方案:确保url1
以给定的基本url(url2
)开始,并检查在'/'
上拆分后url1
的子路径数是否大于基本url的子路径数
var url1 = 'dominName/profilePics/'
var url2 = 'dominName/profilePics/12345.jpg'
我们可以添加一个深度参数来测试特定的深度
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
:匹配输入的开头^
:匹配任何内容(长度>0)+
var url1='dominName/profilePics/';
var url2='dominName/profilePics/12345.jpg';
var escapeReg=url1.replace(/[\-\[\]\/\{\\\\\(\)\*\+\?\.\\\^\$\\\\\\;]/g,“\\$&”);
var myReg=newregexp('^'+escapeReg+'.+');
console.log(myReg.test(url1))//假的
console.log(myReg.test(url2))//正确
hi@奥利安04泰铢谢谢你的回答。你能详细说明一下你的想法吗answer@Nani这只是一个正则表达式。如果你点击我之前的评论,你可以看到它的一个演示。thnx@Olian04它工作正常。我建议你将问题的标题改为:“如何检查一个url路径是否是另一个url路径的子树。”你需要一个更通用的解决方案,因为匹配的url可能并不总是已知的,或者将来可能会更改。您好@伊万无论如何都可以通过使用regEx@Nani检查我的答案!如果以下用例>检查url('bla/dominName/profilePics/123')为true>检查url('bla/dominName/profilePics')为true,则此操作将失败。它还假设url模式已经知道。这不是解决这个问题的好方法,因为即使是url的微小更改也需要更改代码。检查我的答案是否正确。此代码检查url的长度>要转义插入字符串的“dominName/profilePics/”的长度。[0-9]+将被更改,如果可能存在字母字符,即[0-9,a-z,a-z]。如果有什么事情发生,我假设“.jpg”会在那里。
var myReg = new RegExp('^' + url1 + '.+');
var url1 = 'dominName/profilePics/';
var url2 = 'dominName/profilePics/12345.jpg';
/dominName\/profilePics\/[0-9]+\.jpg$/.test(url1);
/dominName\/profilePics\/[0-9]+\.jpg$/.test(url2);