首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Javascript、.test和RegEx评估/?s=的URL

使用Javascript、.test和RegEx评估/?s=的URL
EN

Stack Overflow用户
提问于 2020-11-10 00:16:40
回答 5查看 519关注 0票数 0

我希望在浏览器窗口中测试URL http://example.com,以查找空的搜索字符串,即http://example.com/search/?s=,但不匹配在/search/?s=之后有任何搜索条件的/search/?s=withsearchterms,然后使用if语句和.addClass显示警告未输入搜索词的div。

我试图像下面这样使用Javascript和g.test;根据几个RegEx测试人员的说法,RegEx模式是有效的。但没有运气:

代码语言:javascript
复制
var href = window.location.href;

var contains = /[\/?s=]+/g.test(href);

if (contains) {

$("#no-search-terms").addClass("display-block");

}

我的RegEx错了吗?我对test的使用错了吗?

编辑11/29/2020

这项工作,多亏了Heo

代码语言:javascript
复制
var search = window.location.href;
var regex = /(?<=\/\?s=).*$/
    
var result=regex.exec( search )

if (result && result[0]=='') {
      
  alert("The search terms are empty.");
} else {
  alert("The search terms are not empty or no matched.");
}

但是miknik的答案要简单得多,不需要正则表达式。在Chrome 87、Firefox 83和Safari 14上工作:

代码语言:javascript
复制
const queries = new URLSearchParams(window.location.search)
if (queries.has("s") && queries.get("s").length == 0){

  alert("The search terms are empty.");
      
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-11-29 01:49:48

这里不需要regex,这样的东西在现代浏览器中应该能很好地工作:

代码语言:javascript
复制
const queries = new URLSearchParams(window.location.search)
if (queries.has("s") && queries.get("s").length == 0){
  // do stuff
}
票数 4
EN

Stack Overflow用户

发布于 2020-11-10 01:11:56

可以测试字符串的末尾是否包含/?s=

代码语言:javascript
复制
var url1 = 'https://example.com/?s=';
var url2 = 'https://example.com/?s=withsearchterms';
var regex = /\/\?s=$/;
console.log(url1 + '  ==> ' + regex.test(url1));
console.log(url2 + '  ==> ' + regex.test(url2));

输出:

代码语言:javascript
复制
https://example.com/?s=  ==> true
https://example.com/?s=withsearchterms  ==> false

解释:

  • \/\?s= - expect /?s=
  • $ -尾随$将正则表达式锚定在末尾,例如,前面的文本必须出现在末尾。
  • 因此,如果url没有搜索项,则测试返回true (您可以反转if测试)。
票数 9
EN

Stack Overflow用户

发布于 2020-11-25 04:21:24

另一种(主要是)避免正则表达式的方法:

代码语言:javascript
复制
function isEmptySearch(urlString) {
    const url = new URL(urlString);
    const urlParams = url.search.replace(/^\?/, '').split('&').reduce( (acc, cur) => {
        const param = cur.split('=');
        acc[param[0]] = param[1];
        return acc;
    }, {});
    return !urlParams.s;
}

const testUrls = [
    "http://example.com/search/",
    "http://example.com/search/?s=",
    "http://example.com/search/?s=&foo=bar&baz",
    "http://example.com/search/?s=hello&foo=bar&baz"
];
testUrls.forEach( url => console.log(`${url}: empty search = ${isEmptySearch(url)}`) );

我想我更喜欢Peter早些时候提出的regex选项,因为它不那么冗长,但是这个版本可能很有趣。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64761082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档