【问题标题】:covering query string variations of a window.location.href覆盖 window.location.href 的查询字符串变体
【发布时间】:2017-07-22 16:51:36
【问题描述】:

考虑以下 JS 代码:

if ( window.location.href == "https://teamtreehouse.com/signin" ) {
    // do stuff...
}

我需要比较运算符不仅涵盖确切的 URL,还包括查询字符串和短语“signin”之后的数据的任何可能变体。

你将如何在 JS 中做到这一点?我知道它应该包括正则表达式,但由于线性学习对我来说很重要,我宁愿在接下来的几周内等待我的 JS 正则表达式课程,然后在这个特殊的场合在这里提问。

【问题讨论】:

  • 所以不要阅读完整的 url,window.location 有其他属性,查看文档。其他选项是也不进行比较,但检查字符串是否包含它....

标签: javascript regex if-statement location comparison


【解决方案1】:

试试下面的正则表达式:

/^https:\/\/teamtreehouse\.com\/signin/i

^ 表示“以”开头,多余的\ 字符只是为了转义正则表达式中的特殊字符。

根据@epascarello 的评论,您绝对应该使用“ignore-case”参数i(在上面添加)。


编辑:

使用test函数:

(/^https:\/\/teamtreehouse\.com\/signin/i).test(window.location.href)

【讨论】:

  • 我应该也有一个构造函数,还是这种情况否定了构造函数的需要? (对不起,我习惯了 Linux 的 PCRE,我从来没有写过构造函数来允许使用正则表达式,我等待 JS 正则表达式课程)。
  • Jonah,为什么将原始语法包装在括号中并将 test(window.location.href) 链接到它很重要?
  • @sangoko 我不明白你的第一个问题。 “构造函数”是什么意思?至于你的另一个问题,这里使用的语法只是语法糖;它实际上创建了一个RegExp 的实例,相当于:new RegExp('^https://teamtreehouse.com/signin', 'i')。该实例只是一个 JS 对象,因此为了测试给定字符串是否与该正则表达式匹配,您需要调用 RegExptest 函数并将字符串作为参数传递(您可以省略括号,它们不是必需的,但这样更具可读性,IMO)。
  • AFAIK JS 中的构造函数是一个为类创建实例的函数,但我可能会做出错误的关联。无论如何,感谢您解释这一点。
  • @sangoko 哦,我想我现在明白你的问题了。是的,您可以说RegExp 是一个类,您可以通过调用构造函数来创建该类的实例:new RegExp(...)。正如我所说,/.../ 语法只是构造函数调用的语法糖。
【解决方案2】:

您可以使用String#match 来检查某个字符串是否包含某些内容。

例如:

if (window.location.href.match("https://teamtreehouse.com/signin")){
    // Do something
}

您也可以使用来自Window.location 对象的.host.pathname

例如:

var link = window.location.host + window.location.pathname;
if (link === "www.teamtreehouse.com/signin"){
    // Do something
}

【讨论】:

  • 如果我理解正确,match() 方法是某种全局正则表达式,包括以原始短语开头的所有内容和/或以它结尾的所有内容?
  • @sangoko match 如果.href 包含此字符串https://teamtreehouse.com/signin 之前/之后的任何内容。
【解决方案3】:

if ( /^[https:\/\/teamtreehouse.com/signin][\?[\.]+]?/.test(window.location.href)) {
    // do stuff...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2021-07-26
    • 2014-05-09
    • 2020-12-23
    • 2016-02-10
    相关资源
    最近更新 更多