如何在js中比较两个字符串

时间:2018-07-08 13:24:59

标签: javascript node.js regex

var url1 = 'dominName/profilePics/'
var url2 = 'dominName/profilePics/12345.jpg'

我想比较以上两个网址。如果/profilePics/之后有任何字符串,则应返回true值。

我使用正则表达式(RegExp),但无法获取解决方案。

那么你能帮我这个忙吗?

5 个答案:

答案 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
)