2011-03-29 88 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

相關問題