2011-03-29 52 views
1

在构建提交到搜索的查询时,其中一个输入字段是“OR”的过滤器。只有在引用文本之外出现空白时,我才需要用+ OR +来代替空格。因此,这是逻辑:在javascript中忽略字符串的正则表达式

“快乐的日子” + OR +“爱之船”

我有工作代码,将在这里这样做:

var filter2=$('[name=filter2]').val(); 
var str2 = jQuery.trim(filter2); 
var filter2d = str2.replace(/" "/g, "\"+OR+\""); 

这只能如果文本有引号。 。我希望能够做到这一点还有:

fonzy + OR +“快乐的日子” + OR +“爱之船”

任何帮助表示赞赏

回答

1

钉它:

var input = '"abc def" ghi "klmno pqr" xyz'; 
input.replace (/("[^"]*"|\w+)(\s+|$)/g,'$1+OR+').slice (0,-4) === 
'"abc def"+OR+ghi+OR+"klmno pqr"+OR+xyz' 

这是假设你引用的字符串不包含引号字符。

+0

织补,错过了额外的+ OR +在最后一个字符串 – HBP 2011-03-29 16:25:38

+1

我会用的[^“]代替\ w的情况下FON $ y是 – 2011-03-29 16:38:16

+0

哦,另外,我认为你不必担心尾随空格,因为var str2 = jQuery.trim(filter2); – 2011-03-29 16:42:06

2

你也可以这样做。

'"abc def" ghi "klmno pqr"'.match(/"[^"]*"|[^\s]+/g).join("+OR+"); 
0

这应该这样做...

function replaceWhiteSpace(str) 
{ 
    insideAQuote = false; 
    len = str.length 
    for (i=0; i < len; i++) 
    { 
    if (str.charAt(i) == '"') 
    { 
     insideAQuote = !insideAQuote; 
    } 
    else if (str.charAt(i) == ' ' && !insideAQuote) 
    { 
     str = str.substr(0, i) + "+OR+" + str.substr(i+1); 
    } 
    } 
    alert(str); 
} 
+0

回想起来,我注意到你的标题说你正在寻找一个正则表达式。哎呀,对不起,这不管什么都行,我敢打赌它也快。 – Jmoney38 2011-03-29 16:39:59

相关问题