合并.split()和.match()结果
Combining .split() and .match() results
我正在尝试创建一个包含传递正则表达式和子字符串的字符串子字符串的数组。例如:
['stringpart1', 'match1', 'stringpart2', 'match2', 'stringpart3']
new RegExp("<('/)?" + tag + ".*?>", "g");
我正在使用一个页面源字符串沿着行:
"<html>'n
<meta class='a'/>'n
<meta class='b'/>'n
<div>'n
<p>test</p>'n
</div>'n
</html>"
如果我使用.split(re)
的页面源,我得到的值
['<html>'n', undefined, ''n', undefined, ''n', '<div>'n<p>test</p>'n</div>'n</html>]
其中匹配的值为undefined
。
当我使用.match(re)
时,所有匹配的值都按预期返回:
['<meta class='a'/>', '<meta class='b'/>']
是否有一个javascript函数可以生成下面的结果?
['<html>'n', "<meta class='a'/>", ''n', "<meta class='b'/>", ''n', '<div>'n<p>test</p>'n</div>'n</html>]
编辑-我的解决方案是基于编辑前的原始问题。我会修改,但我实际上认为在对问题进行编辑之后,james emanon的答案是正确的,我想到的任何东西都只是对他已有的东西的重复。
根据您所拥有的正则表达式,似乎您希望能够做的是选择一个特定的html标记并搜索该标记的所有出现的内容,然后将开始和结束标记加上内容输出到输出数组中。
有一种方法可以做到这一点:repl。它链接
const text = "<html><div>content</div>><div>content</div></html>";
const tag = "div";
const re = new RegExp("(<"+tag+">)(.*?)(<'/"+tag+">)", "g");
let final = [];
let matches = text.match(re).map((m) => m.replace(/>(.)/, ">@@@$1")
.replace(/'<(?=[^'<]*$)/, "@@@<")
.split("@@@"));
for (let i=0; i<matches.length; i++) {
for (let j=0; j<matches[i].length; j++) {
final.push(matches[i][j]);
}
}
console.log(final);
P1xt的上述解决方案很好。对于一个简短的版本,这个"似乎"工作-这是我做的一个快速工作。我假设未定义的对应于'matches'数组。
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;
}, [])
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JQuery:向多个匹配结果添加换行符的最简单方法
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- webpack代码拆分了handlerbs文件——结果是文件很大
- 尝试在数组中推送 .match 结果
- java脚本regex.match只查找一个结果
- 为什么不'当存在全局标志时,String.match()会产生预期的结果
- 为什么String.match在结果数组中返回重复项
- match查询是否只返回基于分数的结果?
- 合并.split()和.match()结果
- 为什么't String#match()结果不包含捕获的值?
- 为什么RegExp split()和match()会给出不同的结果
- Regex在javascript中使用.match会多次产生结果