быстрое исправление будет меняться
http.open('POST', url, true);
в
http.open ('POST', url, false);
сделать запрос синхронным.
и вместо return results;
добавить результаты1 = результаты;
, а затем
console.log(results1);
должно работать .. а если не добавить, просто добавьте
var results1;
в начале кода
поэтому полный код должен выглядеть следующим образом
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var http = new XMLHttpRequest();
var url = 'http://page/';
var results1;
http.open('POST', url, false);
//Send the proper header information along with the request
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
http.onload = function () {
let str = (http.responseText);
alert(str)
let pattern =/\bgetObj\("Frm_Logintoken"\)\.value = "([^"]+)";/;
let results = console.log(str.match(pattern)[1]);
results1 = results;
}
console.log(results1);
var params='frashnum=&action=login&Frm_Logintoken='+results1+'&Username=admin&Password=test';
http.send(params);
</script>
</body>
</html>
и результаты в параметрах должны быть в Apostrophe, а не в двойных кавычках, поэтому он должен выглядеть так: 'results1'