使用正则表达式拆分字符串会产生意外结果

时间:2017-09-07 18:28:50

标签: javascript regex split

我正在尝试拆分代表html标记的字符串,以便<ul>标记最终作为结果数组中的单独索引。我创建了以下正则表达式,它似乎适用于查找<ul>...</ul>

/(<ul>.*?<\/ul>)/i

我知道它有效,因为我在这里测试了它:https://regex101.com/r/DNAHzr/2

但是,如下面的剪辑所示,字符串split()似乎没有在给定的正则表达式上实际拆分我的降价:

var body = "soupp\n\nWhat a bloody nice video!! :)) {{youtube:hyYnAioXOqQ}}\n\nSuppp\n\n<ul>\n<li>1\n</li>\n<li><b>2</b>\n</li>\n</ul>\n{{attachment:2938222}}\n\n<ul>\n<li>1\n</li>\n<li>2\n</li>\n</ul>\n<ol>\n<li>bruhh\n</li>\n<li>twotwo\n</li>\n</ol>"

var comps = body.split(/(<ul>.*?<\/ul>)/i).filter(x => !!x);

console.log(comps);

有人可以帮助我让我的方法正常工作吗?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你需要这样的事情:

[ 'soupp\n\nWhat a bloody nice video!! :)) {{youtube:hyYnAioXOqQ}}\n\nSuppp\n\n',
'<ul>',
'\n<li>1\n</li>\n<li><b>2</b>\n</li>\n',
'</ul>',
'\n{{attachment:2938222}}\n\n',
'<ul>',
'\n<li>1\n</li>\n<li>2\n</li>\n',
'</ul>',
'\n<ol>\n<li>bruhh\n</li>\n<li>twotwo\n</li>\n</ol>' ]

是吗?

如果是这样,您应该可以简单地使用:

var comps = body.split(/(<.?ul>)/g);

编辑: 要包含文字和ul代码,您需要匹配.*赢得的新内容。你可以用:

var comps = body.split(/(<ul>[\s\S]*?<\/ul>)/g);

哪个应该给你:

[ 'soupp\n\nWhat a bloody nice video!! :)) {{youtube:hyYnAioXOqQ}}\n\nSuppp\n\n',
'<ul>\n<li>1\n</li>\n<li><b>2</b>\n</li>\n</ul>',
'\n{{attachment:2938222}}\n\n',
'<ul>\n<li>1\n</li>\n<li>2\n</li>\n</ul>',
'\n<ol>\n<li>bruhh\n</li>\n<li>twotwo\n</li>\n</ol>' ]