2016-08-12 6 views
1

私は後読みがJSでサポートされていないので、私はすでにこれを試みたが、エラー['http://some.com/\,brabra', 400, 500]文字列をコンマで区切りますが、、?は無視します。

に文字列http://some.com/\,brabra,400,500を分割したいです。 'http://some.com/\,brabra,400,500'.split(/(?<!\\),/g)

他にもこれを行うには?

+0

は/ 'スプリット(/、(= \ d)は[お試しください) '](https://regex101.com/r/tG5vE6/1) –

答えて

2

あなたは(?:[^,\\]+|\\.)+とのマッチングアプローチを使用することがあります:(?:[^,\\]+|\\.)+マッチ,\以外1+文字の1回以上の出現((?:...)+):

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

regex demo

詳細を参照してください。 ([^,\\]+)または(|)任意のエスケープシーケンス(\\.

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'のようにわずかに単純化できます。 –

+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", "\\,") 
関連する問題