Regression testing: All tests that will be re-run to ensure the functioning of the software (of the existing features and covered by testing). If any functionality has the behavior changed in an unwanted way, these tests will fail and show which part of the system was impacted by the new code. Can be manual, automated, unit etc.
End-to-end testing: Tests performed on the integrated system. With identical environment (or as close as possible) to the end user, exercising complete system flows or functionality (and not just a small part). Ex: In a web application development process, we could have several levels of testing: unit testing, integration testing, mock frontend testing, api testing (or backend) etc. End-to-end testing will be done when all dependencies are available, i.e., in an environment with the frontend, Apis, connected database, using the same environment that the end-user will use.
I recommend doing end-to-end testing whenever there is the smallest deliverable portion available. I also recommend that you Automatize them (increasing the coverage of your regression tests)
See also explanations on how to prevent regression: https://answall.com/a/13530/4186
– Peter Krauss