@@ -186,7 +186,6 @@ function _quote_no_esc (str) {
186186 let match ;
187187 while ( ( match = / ^ [ \s \S ] * ?( [ \s \S ] ) " / . exec ( str ) ) ) {
188188 if ( match [ 1 ] !== '\\' ) return true ;
189-
190189 str = str . substr ( match [ 0 ] . length ) ;
191190 }
192191 return false ;
@@ -227,27 +226,32 @@ function _extract_name (name) {
227226 // Using encodings, too hard. See Mail::Message::Field::Full.
228227 if ( / = ? .* ?\? = / . test ( name ) ) return '' ;
229228
230- // trim whitespace
231- name = name . trim ( ) ;
232- name = name . replace ( / \s + / , ' ' ) ;
229+ // trim & condense whitespace
230+ name = name . trim ( ) . replace ( / \s + / , ' ' ) ;
233231
234232 // Disregard numeric names (e.g. [email protected] ) 235233 if ( / ^ [ \d ] + $ / . test ( name ) ) return '' ;
236234
237- name = name . replace ( / ^ \( ( .* ) \) $ / , '$1' ) // remove outermost parenthesis
238- . replace ( / ^ " ( .* ) " $ / , '$1' ) // remove outer quotation marks
239- . replace ( / \( .* ?\) / g, '' ) // remove minimal embedded comments
240- . replace ( / \\ / g, '' ) // remove all escapes
241- . replace ( / ^ " ( .* ) " $ / , '$1' ) // remove internal quotation marks
242- . replace ( / ^ ( [ ^ \s ] + ) ? , ? ( .* ) $ / , '$2 $1' ) // reverse "Last, First M." if applicable
235+ // remove outermost parenthesis
236+ if ( name . slice ( 0 , 1 ) === '(' && name . slice ( - 1 ) === ')' ) name = name . slice ( 1 , name . length - 1 )
237+
238+ // remove outer quotation marks
239+ if ( name . slice ( 0 , 1 ) === '"' && name . slice ( - 1 ) === '"' ) name = name . slice ( 1 , name . length - 1 )
240+
241+ name = name . replace ( / \( .* ?\) / g, '' ) // remove minimal embedded comments
242+ . replace ( / \\ / g, '' ) ; // remove all escapes
243+
244+ // remove internal quotation marks
245+ if ( name . slice ( 0 , 1 ) === '"' && name . slice ( - 1 ) === '"' ) name = name . slice ( 1 , name . length - 1 )
246+
247+ name = name . replace ( / ^ ( [ ^ \s ] + ) ? , ? ( .* ) $ / , '$2 $1' ) // reverse "Last, First M." if applicable
243248 . replace ( / , .* / , '' ) ;
244249
245250 // Change casing only when the name contains only upper or only
246251 // lower cased characters.
247252 if ( exports . isAllUpper ( name ) || exports . isAllLower ( name ) ) {
248- // console.log(" Changing case of: " + name);
253+ // console.log(` Changing case: ${name} to ${exports.nameCase( name)}` );
249254 name = exports . nameCase ( name ) ;
250- // console.log("Now: " + name);
251255 }
252256
253257 // some cleanup
0 commit comments