Javascript 组合.split()和.match()结果

Javascript 组合.split()和.match()结果,javascript,ecmascript-6,Javascript,Ecmascript 6,我试图创建一个数组,其中包含传递正则表达式和子字符串的字符串子字符串。例如: ['stringpart1'、'match1'、'stringpart2'、'match2'、'stringpart3'] 这是我的正则表达式:newregexp(“,“g”) 我使用的页面源字符串大致如下: "<html>\n <meta class='a'/>\n <meta class='b'/>\n <div>\n <

我试图创建一个数组,其中包含传递正则表达式和子字符串的字符串子字符串。例如:

['stringpart1'、'match1'、'stringpart2'、'match2'、'stringpart3']

这是我的正则表达式:
newregexp(“,“g”)

我使用的页面源字符串大致如下:

"<html>\n
    <meta class='a'/>\n
    <meta class='b'/>\n
    <div>\n
        <p>test</p>\n
    </div>\n
</html>"

编辑-我的解决方案基于编辑前的原始问题。我会修改,但我实际上认为,在对问题进行编辑后,詹姆斯·伊曼农的答案是正确的,我提出的任何问题都只是他所拥有的东西的翻版。

根据您拥有的正则表达式,您希望能够做的似乎是选择一个特定的html标记,并搜索您的内容中出现的所有标记,然后将开始标记和结束标记以及内容输出到一个输出数组中

有一种方法可以实现这一点:

const text=“content>content”;
const tag=“div”;
const re=new RegExp(“()(.*?)”,“g”);
设final=[];
让matches=text.match(re).map((m)=>m.replace(/>(.)/,“>@@@1”)

.replace(/\编辑-我的解决方案是基于编辑前的原始问题。我会修改,但实际上我认为在编辑问题后,詹姆斯·伊曼农的答案是正确的,我提出的任何问题都只是他所拥有的东西的翻版。

根据您拥有的正则表达式,您希望能够做的似乎是选择一个特定的html标记,并搜索您的内容中出现的所有标记,然后将开始标记和结束标记以及内容输出到一个输出数组中

有一种方法可以实现这一点:

const text=“content>content”;
const tag=“div”;
const re=new RegExp(“()(.*?)”,“g”);
设final=[];
让matches=text.match(re).map((m)=>m.replace(/>(.)/,“>@@@1”)

.replace(/\P1xt)上面的解决方案很好。对于较短的版本,此解决方案“似乎”有效-这是我做的一个快速改进。我假设未定义的对应于“匹配”数组

var text = "<html>\n<meta class='a'/>\n<meta class='b'/>\n<div>\n<p>test</p>\n</div>\n</html>"
var tag = "meta";
var re = new RegExp("<(\/)?" + tag + ".*?>", "gm")
var matches = text.match(re)

text.split(re).reduce( (p,c) => {
   (!c) ? p.push(matches.shift()) : p.push(c);
   return p;
}, [])
var text=“\n\n\n\ntest

\n\n” var tag=“meta”; var re=新的RegExp(“,“gm”) var matches=text.match(re) text.split(re).reduce((p,c)=>{ (!c)?p.push(匹配.shift()):p.push(c); 返回p; }, [])
P1xt上面的解决方案很好。对于较短的版本,这一个“似乎”起作用-这是我做的一个快速改进。我假设未定义的对应于“匹配”数组

var text = "<html>\n<meta class='a'/>\n<meta class='b'/>\n<div>\n<p>test</p>\n</div>\n</html>"
var tag = "meta";
var re = new RegExp("<(\/)?" + tag + ".*?>", "gm")
var matches = text.match(re)

text.split(re).reduce( (p,c) => {
   (!c) ? p.push(matches.shift()) : p.push(c);
   return p;
}, [])
var text=“\n\n\n\ntest

\n\n” var tag=“meta”; var re=新的RegExp(“,“gm”) var matches=text.match(re) text.split(re).reduce((p,c)=>{ (!c)?p.push(匹配.shift()):p.push(c); 返回p; }, [])
也许在这里看看regex.exec:
RegExp
应该匹配什么?为什么要这样做?你打算对结果做什么?另外,在你的HTML中,
stringpart1
match1
等字符串在哪里。你声称要返回的字符串?你需要提供一个实际HTML的片段,因为它是很难收集您想要/需要的内容,如果您不包含这些内容,但却将其包含在我们的预期结果中。@jamesemanon为您做了一些更新。请查看regex.exec此处:
RegExp
预期匹配的内容是什么?您为什么要这样做?您计划对结果做什么?还有,
stringp在HTML中的什么位置art1
match1
等。您声称要取回的字符串?您需要提供实际html的一个片段,因为当您不包含它们但将它们包含在我们的预期结果中时,很难收集您想要/需要的内容。@jamesemanon为您做了一些更新
var text = "<html>\n<meta class='a'/>\n<meta class='b'/>\n<div>\n<p>test</p>\n</div>\n</html>"
var tag = "meta";
var re = new RegExp("<(\/)?" + tag + ".*?>", "gm")
var matches = text.match(re)

text.split(re).reduce( (p,c) => {
   (!c) ? p.push(matches.shift()) : p.push(c);
   return p;
}, [])