description: the background gives a long string of strings, including text and links. At present, all I need to do is parse the string into an array like the expected result below, but there is a problem with the regular reference. Suppose there are three links in the original string. My current parsing method will cause the last problem that covers the first two links, which is not the expected result. Please, the gods have a good way to communicate or guide them. Thank you
.direct operation of dom is not supported in WeChat Mini Programs
//
var desc = "HTTPSHTTPSHTTP" +
"<a href="web://http://api.520.com:8891/clientpage/money.php"></a>" +
"warningblock<a href="web://http://api.520.com:8891/activity/convention.php"></a>" +
"HTTPHTTPS<a href="in://goplay"></a>";
//,a
/*
* "HTTPSHTTPSHTTP" +
"<a href="https://api.520.com/clientpage/money.php?url=xxx&title=xxx"></a>" +
"warningblock<a href="https://api.520.com/activity/convention.php?url=xxx&title=xxx"></a>" +
"HTTPHTTPS<a href="/pages/goplay/goplay"></a>"
*
* */
//
[
{
"MsgType" : "text",
"MsgContent": "HTTPSHTTPSHTTP"
},
{
"MsgType" : "navigator",
"MsgContent": "https://api.520.com/clientpage/money.php?url=xxx&title=xxx",
"MsgParam":"",
},
{
"MsgType" : "text",
"MsgContent": "warningblock"
},
{
"MsgType" : "navigator",
"MsgContent": "https://api.520.com/activity/convention.php?url=xxx&title=xxx",
"MsgParam":"",
},
{
"MsgType" : "text",
"MsgContent": "HTTPHTTPS"
},
{
"MsgType" : "navigator",
"MsgContent": "/pages/goplay/goplay",
"MsgParam":"",
},
]
var MsgBody = [];
var MsgContent = null,MsgType = null;
var tmsg = "", amsg, restMsgIndex = null
var expr = /<a[^>]+?href=[""]?([^""]+)[""]?[^>]*>([^<]+)<\/a>/mg
amsg = desc.match(expr); //a
console.log(amsg)
if (!amsg || amsg.length < 1) {
MsgType = "text";
MsgContent = desc;
MsgBody.push({
"MsgType" : MsgType,
"MsgContent": MsgContent
})
}
else //a
{
var len = amsg.length; //a
console.log(len)
for (var i = 0; i < len; iPP) {
tmsg = desc.substring(0, desc.indexOf(amsg[i])); //
if (tmsg) { //
MsgType = "text";
MsgContent = tmsg;
MsgBody.push({
"MsgType" : MsgType,
"MsgContent": MsgContent
})
}
var pattern1 = new RegExp("in://", "ig");//, in://mytrends
var pattern2 = new RegExp("web://", "ig");//, web://http://api.yuepao520.cn:8009/clientpage/friend_raiders.php
var url = amsg[i];
var param = "" ,src="";
MsgType = "navigator";
/*
<a\b -sharpa
[^>]+ -sharpahref
\bhref="([^"]*)" -sharphref1
[^>]*> -sharpahref
([\s\S]*?) -sharpavalue2?
</a> -sharpa
*/
new RegExp("<a\b[^>]+\bhref="([^"]*)"[^>]*>([\s\S]*?)</a>", "ig"); //reg
var link = RegExp.$1; //ahref
var alt = RegExp.$2;//a
console.log(url,link,alt)
//a
if(pattern1.test(url)) //in <a href="in://goplay">
{
switch (true) {
case new RegExp("goplay", "ig").test(link):
src = app.globalData.navigateTo.goPlay;
break;
case new RegExp("userinfo", "ig").test(link):
var temp = (link).split("?");
src = app.globalData.navigateTo.getUserInfo+"?"+temp[1];
break;
case new RegExp("setmyinfo", "ig").test(link):
src = app.globalData.navigateTo.setUserInfo;
break;
case new RegExp("setting", "ig").test(url):
break;
case new RegExp("mytrends", "ig").test(url):
break;
case new RegExp("myphoto", "ig").test(url):
break;
case new RegExp("visitorrecord", "ig").test(url):
break;
case new RegExp("feedback", "ig").test(url):
src = app.globalData.navigateTo.feedBack;
break;
case new RegExp("vip_pay", "ig").test(url):
src = app.globalData.navigateTo.vipRecharge;
break;
case new RegExp("money_pay", "ig").test(url):
src = app.globalData.navigateTo.goldRecharge;
break;
case new RegExp("payment", "ig").test(url):
src = app.globalData.navigateTo.goldRecharge;
break;
}
}
else if(pattern2.test(url))//web <a href="web://http://api.520.com:8891/activity/convention.php">
{
src = (link).split("//"); //https
if(src[1].indexOf("https") == -1){
param = src[1].replace(/http/,"https")+"//"+src[2];
param = param.replace(/:8891/,"")
} else {
param = src[1]+"//"+src[2]
}
//H5
//src = app.globalData.navigateTo.clientPage+"?url="+param+"&title="+alt
src = ""+"?url="+param+"&title="+alt
}
MsgContent = amsg[i];
MsgBody.push({
"MsgType" : MsgType,
"MsgContent": src,
"MsgParam":alt,
})
restMsgIndex = desc.indexOf(amsg[i]) + amsg[i].length;
desc = desc.substring(restMsgIndex);
}
if(desc){ //
MsgType = "text";
MsgBody.push({
"MsgType" : MsgType,
"MsgContent": desc
})
}
}