I send some ether from exchange A to B via smart contract, however the latter does not support smart contract at moment, is there any way to get those ether back?
What is the recipient address, a "normal" account, or a smart contract itself?
If it is a normal account, then the owner (exchange) holding the private key, can send the ether back.
If the address is a smart contract, then it will depend on whether the exchange has provided ways of getting the ether out (what is supposable).
Can you provide more information please, so we can have a deeper look? Etherscan links, transaction...
You have to ask with B exchange's support. There's nothing else you can do about it.
It is likely exchange B has a system that tracks when it address receives ether. And this system do not support "internal transactions", ie when a contract is sending ether.
But your ether was credited immediately when the transaction was confirmed in the blockchain. So it is available in their recipient address.
They may be able to manually verify the transaction and credit the ether in your account. To return your ethers is probably harder because you used an exchange address, they have to be sure you are the owner.