我希望在浏览器窗口中测试URL http://example.com
,以查找空的搜索字符串,即http://example.com/search/?s=
,但不匹配在/search/?s=
之后有任何搜索条件的/search/?s=withsearchterms
,然后使用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");
}
我的RegEx错了吗?我对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.");
}
但是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.");
}
发布于 2020-11-29 01:49:48
这里不需要regex,这样的东西在现代浏览器中应该能很好地工作:
const queries = new URLSearchParams(window.location.search)
if (queries.has("s") && queries.get("s").length == 0){
// do stuff
}
发布于 2020-11-10 01:11:56
可以测试字符串的末尾是否包含/?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));
输出:
https://example.com/?s= ==> true
https://example.com/?s=withsearchterms ==> false
解释:
\/\?s=
- expect /?s=
$
-尾随$
将正则表达式锚定在末尾,例如,前面的文本必须出现在末尾。if
测试)。发布于 2020-11-25 04:21:24
另一种(主要是)避免正则表达式的方法:
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选项,因为它不那么冗长,但是这个版本可能很有趣。
https://stackoverflow.com/questions/64761082
复制相似问题