用字符串中的字符替换空格,除了带有JQuery的引号之间的单词

时间:2014-12-30 17:38:07

标签: javascript jquery regex string

在我的网络应用程序中,我使用文本框和附加了jQuery onclick事件处理程序的按钮实现了搜索功能。每个按钮触发不同的搜索处理程序。

HTML

<input id="searchText" placeholder="What are you looking for?" type="text" />

<div id="searchLinksBar">
    <a href="/search">All</a>
    <a href="/search/downloads">Downloads</a>
    <a href="/search/kb">Knowledge Base</a>
</div>

的jQuery

"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, "+");
}

搜索效果很好,除非用户想要通过在引号中包含多个单词来搜索精确短语。不应该是&#39; +&#39;引号内的单词之间的符号,否则处理程序不能按预期工作。我可能会想到一个使用正则表达式的解决方案,或者使用concat和split函数(见下文)将引号中的单词与带引号的单词分开并放在数组中,但也许有一个更优雅的解决方案

var phrases = [].concat.apply([], text.split('"').map(function(v,i){
     return i%2 ? '"'+v+'"' : v.split(' ')
})).filter(Boolean);

0 个答案:

没有答案