2017-06-06 68 views
1

字符串我試圖分裂:正則表達式拆分與負回顧後

string1, string2, string\,3, string4

我想上面的字符串分割每個逗號,在逗號與反斜線除。

我無法在我的JavaScript中利用否定向後看。

我嘗試:

var splits = "string1, string2, string\,3, string4".split("(?<!\\\\),");

逗號都沒有被承認。

潛在的解決方案:經過研究,我偶然發現了this SO問題。但是,我不明白這些解決方法已足以將上述代碼更改爲替換用例。

+0

該輸入應該是什麼樣子:''foo \\,bar「'? (即,當你逃脫轉義字符時)。或者這個:''foo \\\,bar「'? – Halcyon

+0

你是否還需要空比賽?就像'foo ,, bar' =>'['foo','','bar']'? –

+0

你的輸入是真的'string \,3,'或者'string3 \,'?那第二個逗號真的存在於string3中?否則,'(?<!\\),' –

回答

1

您可以使用

s.match(/(?:[^,\\]|\\.)+/g) 

regex demo。它將匹配除逗號和反斜槓之外的一個或多個字符,或與文字反斜槓一起轉義的任何字符。

請注意,字符串文字應具有雙反斜線以定義文字反斜槓。

var splits = "string1, string2, string\\,3, string4".match(/(?:[^,\\]|\\.)+/g); 
 
console.log(splits);

0

根據您的輸入樣本中的分隔符,沒有必要識別逃脫逗號。分隔符是「逗號空格」,所以就使用它。如果您想保留逗號和值之間的空間(或更新你的問題表明,沒有這種方式構造輸入)

,使用此:

var splits = "string1, string2, string\\,3, string4".split(/,(?=)/); 
 
console.log(splits);

如果你想刪除前導空格,使用此:

var splits = "string1, string2, string\\,3, string4".split(/, /); 
 
console.log(splits);