我不得不在JavaScript此處拆分此字符串:JavaScript高級分裂
hl=windows xp \"windows xp\"
三個字。
我用:
keywords = keywords.split(/ /);
但後來我得到了4個字:
windows
xp
\"windows
xp\"
我怎麼能拆分此字符串只是3個字?
編輯:我如何刪除\」
我不得不在JavaScript此處拆分此字符串:JavaScript高級分裂
hl=windows xp \"windows xp\"
三個字。
我用:
keywords = keywords.split(/ /);
但後來我得到了4個字:
windows
xp
\"windows
xp\"
我怎麼能拆分此字符串只是3個字?
編輯:我如何刪除\」
這裏有一個簡單的例子:
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;
});
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"]
在split()中使用適當的正則表達式更好嗎? – ajsie 2009-12-29 03:31:52
沒有工作。它返回窗口,xp – ajsie 2009-12-29 03:35:23
正則表達式方法的問題在於,您的問題對於正則表達式來說不夠常規,無法輕鬆表達。修復了懸掛詞問題,多數民衆贊成什麼我沒有測試 – barkmadley 2009-12-29 03:40:57
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, "")
});
你想要什麼3個單詞? - 你能提供一些例子嗎? – 2009-12-29 01:44:46
大概海報想要:hl = windows,xp,「windows xp」 – 2009-12-29 01:46:05
thats correct =) – ajsie 2009-12-29 01:47:26