2016-08-12 114 views
1

我想分割字符串http://some.com/\,brabra,400,500分成['http://some.com/\,brabra', 400, 500]如何以逗號分割字符串但忽略 ,?

我已經試過這個,但錯誤,因爲lookbehind在js中不支持。 'http://some.com/\,brabra,400,500'.split(/(?<!\\),/g)

任何其他想法做到這一點?

+0

試試['分裂(/,(= \ d)/ )'](https://regex101.com/r/tG5vE6/1) –

回答

2

您可以使用匹配方法與(?:[^,\\]+|\\.)+

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

regex demo

詳細:在(?:[^,\\]+|\\.)+比賽比,\以外的1個+字符的一個或多處((?:...)+) (與[^,\\]+)或(|)任何轉義序列(\\.

var s = "http://some.com/\\,brabra,400,500" 
 
console.log(s.match(/(?:[^,\\]+|\\.)+/g));

或替代方法如果與後面總是以數字要拆分的逗號:

split(/,(?=\d)/) 

this regex demo

var s = "http://some.com/\\,brabra,400,500" 
 
console.log(s.split(/,(?=\d)/));

+1

不錯。可以簡化爲'/(\\。| [^,])+/g'。 – 2016-08-12 12:02:15

+1

太棒了。非常感謝。 –

1

可以使用模擬積極向前看符號帶倒車字符串:

String.prototype.reverse = function() { 
 
    return this.split("").reverse().join(""); 
 
} 
 

 
Array.prototype.reverseElements = function() { 
 
    var ar = []; 
 
    for (var i = 0; i < this.length; i++) { 
 
    if (typeof this[i] === 'string') 
 
     ar[i] = this[i].reverse(); 
 
    else { 
 
     //Do something if not a String 
 
    } 
 
    } 
 
    return ar; 
 
} 
 

 
var str = "http://some.com/\,brabra,400,500"; 
 
var ar = str.reverse().split(/,(?!\\)/).reverse().reverseElements(); 
 

 
console.log(ar);

注:正則表達式的工作here,但不是在片段。

1

經典之作,如果這樣的問題稍微不雅的做法是用魔法令牌替換一些字符,然後把它們放回後:

str 
    .replace("\\,", "DONT_SPLIT_HERE") 
    .split(',') 
    .map(part => part.replace("DONT_SPLIT_HERE", "\\,") 
相關問題