function ws(strings, expr) {
  expr = [];
  for (let i = 1; i < arguments.length; i++) {
    expr.push(arguments[i]);
  }

  let res = '';

  for (let i = 0; i < strings.length; i++) {
    res += strings[i].replace(wsRgxp, ' ') + (i in expr ? expr[i] : '');
  }

  return res;
}
function ws(strings, expr) {
  expr = [];
  for (let i = 1; i < arguments.length; i++) {
    expr.push(arguments[i]);
  }

  let res = '';

  for (let i = 0; i < strings.length; i++) {
    res += strings[i].replace(wsRgxp, ' ') + (i in expr ? expr[i] : '');
  }

  return res;
}
function ws ( strings , expr ) { expr = [ ] ; for ( let i = 1 ; i < arguments . length ; i ++ ) { expr . push ( arguments [ i ] ) ; } let res = '' ; for ( let i = 0 ; i < strings . length ; i ++ ) { res += strings [ i ] . replace ( wsRgxp , ' ' ) + ( i in expr ? expr [ i ] : '' ) ; } return res ; }
String tag (for ES6 string templates) for truncate starting whitespaces and eol-s

@param {!Array<string>} strings
@param {...?} expr
@return {string}
String tag ( for ES6 string templates ) for truncate starting whitespaces and eol - s