2013-01-15 7 views
6

Eventuali duplicati:
how to split a string in js with some exceptionsCome posso usare il metodo javascript split usando il carattere escape?

Ad esempio, se la stringa è:

abc&def&ghi\&klm&nop 

uscita richiesto è array di stringhe

['abc', 'def', 'ghi\&klm', 'nop] 

Per favore suggeriscimi la soluzione più semplice.

+0

Anche se questa risposta vale per Java, lo fa affrontare lo stesso problema, e non dovrebbe essere difficile da tradurre: http://stackoverflow.com/questions/3870415/splitting-a-string-that-has-escape-sequence-using-regular-expression-in-java –

+3

@cheeseweasel sfortunatamente, poiché js non implementa "lookbehind negativo", non sarà così facile da tradurre. ;) – Yoshi

+1

qualche utile lettura: [Mimando Lookbehind in JavaScript] (http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript) – Yoshi

risposta

-2

provare questo:

var v = "abc&def&ghi\&klm&nop"; 
var s = v.split("&"); 
for (var i = 0; i < s.length; i++) 
    console.log(s[i]); 
5

Ecco una soluzione in JavaScript:

var str = 'abc&def&ghi\\&klm&nop', 
str.match(/([^\\\][^&]|\\&)+/g); //['abc', 'def', 'ghi\&klm', 'nop] 

utilizza match per abbinare tutti i caratteri che sono che sono ([not \ and &] or [\ and &]).

1
var str = "abc&def&ghi\\&klm&nop"; 
    var test = str.replace(/([^\\])&/g, '$1\u000B').split('\u000B'); 

è necessario sostituire \ & con doppie barre

how to split a string in js with some exceptions

di prova conterrà l'array è necessario

4

È necessario match:

"abc&def&ghi\\&klm&nop".match(/(\\.|[^&])+/g) 
# ["abc", "def", "ghi\&klm", "nop"] 

Sono assumendo che la tua stringa proviene da una fonte esterna e non è un letterale javascript.

0

Si può fare con indexOf solo oldschool:

var s = 'abc&def&ghi\\&klm&nop', 
    lastIndex = 0, 
    prevIndex = -1, 
    result = []; 
while ((lastIndex = s.indexOf('&', lastIndex+1)) > -1) { 
    if (s[lastIndex-1] != '\\') { 
     result.push(s.substring(prevIndex+1, lastIndex)); 
     prevIndex = lastIndex; 
    } 
} 
result.push(s.substring(prevIndex+1)); 
console.log(result); 
Problemi correlati