Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较js中的两个字符串_Javascript_Node.js_Regex - Fatal编程技术网

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);