我有這個字符串:如何在JS有一些例外分割字符串
a\,bcde,fgh,ijk\,lmno,pqrst\,uv
我需要一個JavaScript函數,將通過每,
但只有那些不有\
分割字符串在他們面前
這怎麼辦?
我有這個字符串:如何在JS有一些例外分割字符串
a\,bcde,fgh,ijk\,lmno,pqrst\,uv
我需要一個JavaScript函數,將通過每,
但只有那些不有\
分割字符串在他們面前
這怎麼辦?
這是我能想出最短的事情:
'a\\,bcde,fgh,ijk\\,lmno,pqrst\\,uv'.replace(/([^\\]),/g, '$1\u000B').split('\u000B')
背後的想法是要找到每一個地方逗號不帶前綴的地方一個反斜槓,用那些不常見的字符串取代你的字符串,然後用那個不常見的字符串分割。
請注意,反斜槓之前逗號必須使用另一個反斜槓轉義。否則,javascript會將\,
作爲轉義逗號對待,並只產生一個逗號!換句話說,如果你不能逃避反斜槓,JavaScript看到這個:a\,bcde,fgh,ijk\,lmno,pqrst\,uv
這個a,bcde,fgh,ijk,lmno,pqrst,uv
。
您可以使用正則表達式來進行拆分。
這裏是鏈接在JavaScript http://www.w3schools.com/jsref/jsref_obj_regexp.asp
這裏正則表達式是鏈接到其他帖子裏筆者已經使用正則表達式拆分Javascript won't split using regex
從第一個鏈接,如果你注意,您可以創建一個正則表達式使用
?!n匹配後面沒有指定字符串任何字符串n
[,]!\\
由於JavaScript中的正則表達式不支持lookbehinds,因此我不打算用一個巨大的黑客來模仿這種行爲。相反,您可以在所有逗號(,
)上使用split()
,然後粘貼不應該首先拆分的部分。
快速「N」髒demo:
var str = 'a\\,bcde,fgh,ijk\\,lmno,pqrst\\,uv'.split(','), // Split on all commas
out = []; // Output
for (var i = 0, j = str.length - 1; i < j; i++) { // Iterate all but last (last can never be glued to non-existing next)
var curr = str[i]; // This piece
if (curr.charAt(curr.length - 1) == '\\') { // If ends with \ ...
curr += ',' + str[++i]; // ... glue with next and skip next (increment i)
}
out.push(curr); // Add to output
}
另一個醜陋的黑客身邊缺少查找的屁股:
function rev(s) {
return s.split('').reverse().join('');
}
var s = 'a\\,bcde,fgh,ijk\\,lmno,pqrst\\,uv';
// Enter bizarro world...
var r = rev(s);
// Split with a look-ahead
var rparts = r.split(/,(?!\\)/);
// And put it back together with double reversing.
var sparts = [ ];
while(rparts.length)
sparts.push(rev(rparts.pop()));
for(var i = 0; i < sparts.length; ++i)
$('#out').append('<pre>' + sparts[i] + '</pre>');
演示:http://jsfiddle.net/ambiguous/QbBfw/1/
我不認爲我會在現實生活中做到這一點,但即使它確實使它的工作原理我感到骯髒。考慮這個好奇心,而不是你應該真正使用的東西。
在情況下,如果需要刪除反斜槓也:
var test='a\\.b.c';
var result = test.replace(/\\?\./g, function (t) { return t == '.' ? '\u000B' : '.'; }).split('\u000B');
//result: ["a.b", "c"]
重複的問題? http:// stackoverflow。com/questions/820172/how-to-split-a-comma-separated-string-while-ignore-escaped-commas –
@Eran這個問題是關於Java的。不幸的是,Javascript不知道向後看,所以解決方案在這裏不起作用。 – stema
[Javascript正則表達式 - 拆分字符串]的可能重複(http://stackoverflow.com/questions/4853118/javascript-regex-split-string) – outis