@@ -5,35 +5,38 @@ function str_getcsv(input, delimiter, enclosure, escape) {
5
5
// returns 1: ['abc', 'def', 'ghi']
6
6
// example 2: str_getcsv('"row2""cell1","row2cell2","row2cell3"', null, null, '"');
7
7
// returns 2: ['row2"cell1', 'row2cell2', 'row2cell3']
8
+ // example 3: str_getcsv('"row2""cell1",row2cell2,row2cell3', null, null, '"');
8
9
9
- var output = [ ] ;
10
+ var i , inpLen , output = [ ] ;
10
11
var backwards = function ( str ) { // We need to go backwards to simulate negative look-behind (don't split on
11
12
//an escaped enclosure even if followed by the delimiter and another enclosure mark)
12
13
return str . split ( '' )
13
14
. reverse ( )
14
15
. join ( '' ) ;
15
16
} ;
16
17
var pq = function ( str ) { // preg_quote()
17
- return ( str + '' )
18
- . replace ( / ( [ \\ \. \+ \* \? \[ \^ \] \$ \( \) \{ \} \= \! \ <\> \| \: ] ) / g, '\\$1' ) ;
18
+ return String ( str )
19
+ . replace ( / ( [ \\ \. \+ \* \? \[ \^ \] \$ \( \) \{ \} \= \! < \> \| \: ] ) / g, '\\$1' ) ;
19
20
} ;
20
21
21
22
delimiter = delimiter || ',' ;
22
23
enclosure = enclosure || '"' ;
23
24
escape = escape || '\\' ;
25
+ var pqEnc = pq ( enclosure ) + '?' ;
26
+ var pqEsc = pq ( escape ) ;
24
27
25
- input = input . replace ( new RegExp ( '^\\s*' + pq ( enclosure ) ) , '' )
26
- . replace ( new RegExp ( pq ( enclosure ) + '\\s*$' ) , '' ) ;
28
+ input = input . replace ( new RegExp ( '^\\s*' + pqEnc ) , '' )
29
+ . replace ( new RegExp ( pqEnc + '\\s*$' ) , '' ) ;
27
30
28
31
// PHP behavior may differ by including whitespace even outside of the enclosure
29
32
input = backwards ( input )
30
- . split ( new RegExp ( pq ( enclosure ) + '\\s*' + pq ( delimiter ) + '\\s*' + pq ( enclosure ) + '(?!' + pq ( escape ) + ')' ,
33
+ . split ( new RegExp ( pqEnc + '\\s*' + pq ( delimiter ) + '\\s*' + pqEnc + '(?!' + pqEsc + ')' ,
31
34
'g' ) )
32
35
. reverse ( ) ;
33
36
34
- for ( var i = 0 ; i < input . length ; i ++ ) {
37
+ for ( i = 0 , inpLen = input . length ; i < inpLen ; i ++ ) {
35
38
output . push ( backwards ( input [ i ] )
36
- . replace ( new RegExp ( pq ( escape ) + pq ( enclosure ) , 'g' ) , enclosure ) ) ;
39
+ . replace ( new RegExp ( pqEsc + pqEnc , 'g' ) , enclosure ) ) ;
37
40
}
38
41
39
42
return output ;
0 commit comments