Javascript 用字符串中的字符替换空格,但JQuery引号之间的单词除外
在我的web应用程序中,我实现了一个搜索功能,其中包含一个文本框和带有jQuery onclick事件处理程序的按钮。每个按钮都会触发不同的搜索处理程序 HTML 搜索效果非常好,除非用户希望通过在引号中包含几个单词来搜索准确的短语。引号中的单词之间不应该有“+”符号,否则处理程序无法按预期工作。我可能会想到一个解决方案,使用正则表达式或使用concat和split函数(见下文)将引号内的单词与带引号的单词分开,然后放入数组中,但也许有一个更优雅的解决方案Javascript 用字符串中的字符替换空格,但JQuery引号之间的单词除外,javascript,jquery,regex,string,Javascript,Jquery,Regex,String,在我的web应用程序中,我实现了一个搜索功能,其中包含一个文本框和带有jQuery onclick事件处理程序的按钮。每个按钮都会触发不同的搜索处理程序 HTML 搜索效果非常好,除非用户希望通过在引号中包含几个单词来搜索准确的短语。引号中的单词之间不应该有“+”符号,否则处理程序无法按预期工作。我可能会想到一个解决方案,使用正则表达式或使用concat和split函数(见下文)将引号内的单词与带引号的单词分开,然后放入数组中,但也许有一个更优雅的解决方案 var phrases = [].co
var phrases = [].concat.apply([], text.split('"').map(function(v,i){
return i%2 ? '"'+v+'"' : v.split(' ')
})).filter(Boolean);
“引号中的单词之间不应该有“+”符号,否则处理程序无法按预期工作。”然后处理程序已损坏,您应该修复该问题,而不是尝试预处理结果以解决它。恕我直言,您的
ToQueryString
与“to query string”函数完全不同,要正确地将用户输入的文本作为URI编码的参数发送,您还需要做很多其他事情,这就是上面所做的。幸运的是,已经有一些东西可以做到这一点:encodeURIComponent
:感谢您的评论。为了关注问题的范围,我省略了处理程序希望下划线在引号之间分隔单词。出于同样的原因,我简化了ToQueryString函数坦率地说,这没有多大意义,它只是请求提供不准确信息的帮助。但是你为什么要重新发明轮子呢?让您的处理程序预期URI编码的数据(您的服务器可能会为您处理),并正确地对数据进行URI编码。完成。只是因为我无法控制处理程序:)
"use strict";
$(document).ready(function() {
$("#searchLinksBar a").click(function() {
//Get content from the selected anchor
var categoryURL = $(this).attr("href");
//Get search string
var searchText = $("#searchText").val();
var searchString = ToQueryString(searchText);
//Check if the search bar is filled
if(searchString.trim()){
categoryURL = categoryURL + "&str="
}
//Attach the two strings to get our full URL
var searchUrl = categoryURL + searchString;
window.location.href = searchUrl;
return false;
})
});
function ToQueryString(text) {
return text.replace(/ /g, "+");
}
var phrases = [].concat.apply([], text.split('"').map(function(v,i){
return i%2 ? '"'+v+'"' : v.split(' ')
})).filter(Boolean);