Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用字符串中的字符替换空格,但JQuery引号之间的单词除外_Javascript_Jquery_Regex_String - Fatal编程技术网

Javascript 用字符串中的字符替换空格,但JQuery引号之间的单词除外

Javascript 用字符串中的字符替换空格,但JQuery引号之间的单词除外,javascript,jquery,regex,string,Javascript,Jquery,Regex,String,在我的web应用程序中,我实现了一个搜索功能,其中包含一个文本框和带有jQuery onclick事件处理程序的按钮。每个按钮都会触发不同的搜索处理程序 HTML 搜索效果非常好,除非用户希望通过在引号中包含几个单词来搜索准确的短语。引号中的单词之间不应该有“+”符号,否则处理程序无法按预期工作。我可能会想到一个解决方案,使用正则表达式或使用concat和split函数(见下文)将引号内的单词与带引号的单词分开,然后放入数组中,但也许有一个更优雅的解决方案 var phrases = [].co

在我的web应用程序中,我实现了一个搜索功能,其中包含一个文本框和带有jQuery onclick事件处理程序的按钮。每个按钮都会触发不同的搜索处理程序

HTML

搜索效果非常好,除非用户希望通过在引号中包含几个单词来搜索准确的短语。引号中的单词之间不应该有“+”符号,否则处理程序无法按预期工作。我可能会想到一个解决方案,使用正则表达式或使用concat和split函数(见下文)将引号内的单词与带引号的单词分开,然后放入数组中,但也许有一个更优雅的解决方案

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);