2009-12-29 54 views
1

我不得不在JavaScript此處拆分此字符串:JavaScript高級分裂

hl=windows xp \"windows xp\" 

三個字。

我用:

keywords = keywords.split(/ /); 

但後來我得到了4個字:

windows 
xp 
\"windows 
xp\" 

我怎麼能拆分此字符串只是3個字?

編輯:我如何刪除\」

+1

你想要什麼3個單詞? - 你能提供一些例子嗎? – 2009-12-29 01:44:46

+1

大概海報想要:hl = windows,xp,「windows xp」 – 2009-12-29 01:46:05

+0

thats correct =) – ajsie 2009-12-29 01:47:26

回答

2

這裏有一個簡單的例子:

keywords = keywords.match(/"[^"]*"|\w+/g).map(function(val) { 
    if (val.charAt(0) == '"' && val.charAt(val.lenngth-1) == '"') { 
     val = val.substr(1, val.length-2); 
    } 
    return val; 
}); 
+0

it作品優秀。但你怎麼寫它作爲一個函數,所以我可以把一個字符串,並得到一個數組? – ajsie 2009-12-29 07:30:12

+0

它沒有在åäö和數字上工作,所以我將\ w更改爲[a-öA-Ö0-9] – ajsie 2009-12-29 07:36:03

+1

您也可以使用'\ S'而不是'\ w'。 – Gumbo 2009-12-29 09:47:57

2
function split(s, on) { 
    var words = []; 
    var word = ""; 
    var instring = false; 
    for (var i = 0; i < s.length; i++) { 
     var c = s.charAt(i); 
     if (c == on && !instring) { 
      words.push(word); 
      word = ""; 
     } else { 
      if (c != '"') 
       word += c; 
     } 
     if (c == '"') instring = !instring; 
    } 
    if (word != '') words.push(word); //dangling word problem solved 
    return words; 
} 

和適合的OP的例子

var hl = "windows xp \"windows xp\""; 
split(hl, " "); // returns ["windows","xp","windows xp"] 
+0

在split()中使用適當的正則表達式更好嗎? – ajsie 2009-12-29 03:31:52

+0

沒有工作。它返回窗口,xp – ajsie 2009-12-29 03:35:23

+0

正則表達式方法的問題在於,您的問題對於正則表達式來說不夠常規,無法輕鬆表達。修復了懸掛詞問題,多數民衆贊成什麼我沒有測試 – barkmadley 2009-12-29 03:40:57

2
hl="windows xp \"windows xp\"" 

var results = hl.split(/ /); 

for(var s in results) { 
    try { 
     while (results[s].search("\"") > -1) { 
      results.splice(s, 1); 
     } 
    } catch(e) {} 
} 

var quoted = hl.match(/"[^"]*"/g); //matches quoted strings 

for(var s in quoted) { 
    results.push(quoted[s]); 
} 

//results = ["windows", "xp", ""windows xp""] 

編輯,一個內襯的使用例子:

var results = hl.match(/\w+|"[^"]*"/g).map(function(s) { 
    return s.replace(/^"+|"+$/g, "") 
}); 
+0

是不是更好地只使用適當的正則表達式在split()? – ajsie 2009-12-29 03:31:22

+0

但它是一個很好的工作功能,但。 thx – ajsie 2009-12-29 03:37:03

+0

不管你信不信,有些事情對於正則表達式來說是很棘手的(但請看Gumbo的回答)。 – outis 2009-12-29 04:37:42