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

Blu*_*nch 0 javascript regex

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

我正在尝试使用 Javascript,g.test如下所示;RegEx根据几个 RegEx 测试人员的说法,该模式是有效的。但没有运气:

var href = window.location.href;

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

if (contains) {

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

}
Run Code Online (Sandbox Code Playgroud)

我的正则表达式错了吗?是我用test错了吗?


编辑 11/29/2020

这项工作,感谢Heo

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.");
}
Run Code Online (Sandbox Code Playgroud)

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

const queries = new URLSearchParams(window.location.search)
if (queries.has("s") && queries.get("s").length == 0){

  alert("The search terms are empty.");
      
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*eny 8

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

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));
Run Code Online (Sandbox Code Playgroud)

输出:

https://example.com/?s=  ==> true
https://example.com/?s=withsearchterms  ==> false
Run Code Online (Sandbox Code Playgroud)

解释:

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