Hi, I tried to use as follows: $theme.append(commasAnd(levels.join(","))).append('<br />');
I get an error. This is the message I got in Firebug: first.join is not a function commasAnd("London,Lisbon")Base.js (line 24) (?)()()Account.js (line 86) handle()()JQuery%2...1.2.6).js (line 2093) (?)()()JQuery%2...1.2.6).js (line 1875) [Break on this error] var result = first.join(', '); What am I doing wrong? Thanks, Miguel On Nov 22, 7:08 pm, "Michael Geary" <[EMAIL PROTECTED]> wrote: > I suggest not trying to use a regular expression at all, but just some > straight-up array manipulation. It makes it easier to handle all the special > cases involved here. > > Paste this code into the multiline Firebug console (orange up arrow in the > bottom right of the Firebug panel) and hit Ctrl+Enter to run it: > > function commasAnd( array ) { > if( array.length < 2 ) return array.join(''); > var first = array.slice( 0, -1 ), last = array.slice( -1 ); > var result = first.join(', '); > if( last ) { > if( first.length > 1 ) result += ','; > result += ' and ' + last; > } > return result; > > } > > function test( array ) { > console.log( '"' + commasAnd(array) + '"' ); > > } > > test([]); > test([ 'a' ]); > test([ 'a', 'b' ]); > test([ 'a', 'b', 'c' ]); > test([ 'a', 'b', 'c', 'd' ]); > > It should display: > > "" > "a" > "a and b" > "a, b, and c" > "a, b, c, and d" > > I took the liberty of following the English usage that is traditionally > considered correct: "a, b, and c", not "a, b and c". If you prefer "a, b and > c", you can remove the line with the first.length > 1 test. > > -Mike > > > From: ricardobeat > > > I'm not very good with regexes but this should do, just make > > sure you always have a space after the comma: > > > levels.join(',').replace(/(\,)(.[^,]*)$/,' and$2') > > > I'm sure someone else can come up with a much more elegant expression! > > > - ricardo > > On Nov 22, 3:10 pm, shapper <[EMAIL PROTECTED]> wrote: > > > Hello, > > > > I have the following code: > > > > $levels = $('input[name="Levels"]:checked + label'); levels = > > > $levels.map(function() { return $(this).text(); }).get(); > > > $theme.append(levels.join(", ")).append('<br />'); > > > > How can I replace the last comma in levels by " and "? > > > > I tried: > > > levels.join(", ").replace(/, $/,'and ') > > > > This is not working. > > > > Could someone, please, help me? > > > > Thanks, > > > Miguel