#JavaScript (ES6), 46

Using a regexp to find sad emoticons, that are those beginning with `>)]}` or ending with `<([{c`. Side note: other regexps here may be shorter but I'm not sure to understand them.

Usual note: test running the snippet on any EcmaScript 6 compliant browser (notably <s>not</s> newest Chrome but not MSIE. I tested on Firefox, Safari 9 could go) 

**Big news** It seems arrow functions finally arrived to Chrome land! [Rel 45, august 2015][1] 
<!-- begin snippet: js hide: false -->

<!-- language: lang-js -->

    F=s=>/^[\])}>]|[[({<c]$/.test(s)?'sad':'happy'

    //Same length
    X=s=>/[\])}>].|.[[({<c]/.test(s)?'sad':'happy'

    Y=s=>s.match`].|[)}>].|.[[({<c]`?'sad':'happy'
                     
    //TEST
    out=x=>O.innerHTML+=x+'\n';

    sad='>:[ :-( :( :-c :c :-< :< :-[ :[ :{ 8( 8-( ]:< )-: ): >-: >: ]-: ]: }: )8 )-8'.split` `
    happy=':-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^:'.split` ` 

    out('The sad faces')                   
    sad.forEach(x=>out(x + ' is ' + F(x)))
    out('\nThe happy faces')
    happy.forEach(x=>out(x + ' is ' + F(x)))

<!-- language: lang-html -->

    <pre id=O></pre>

<!-- end snippet -->


  [1]: https://www.chromestatus.com/feature/5047308127305728