如何轻松拆分此字符串

时间:2013-05-29 14:21:34

标签: javascript string string-split

我有以下字符串:

"<--something--><++something++><**something**>"

字符串可以有任意数量的“某事”,即使只是一次。

我需要像这样分开它:

["<--something-->", "<++something++>", ...]

但我不知道怎么做得最好。

我会做类似string.split("><")的事情,但我会做:

["<--something--", "++something++", ...]

使用string.split(/(><)/)我会得到:

["<--something--", "><", "++something++", "><", ...]

我可以想到一些不太理想的解决方案,但我想要非常优雅的解决方案。

4 个答案:

答案 0 :(得分:4)

你没有拆分字符串,你正在匹配它。

试试这个:

string.match(/<(.)\1[^>]+?\1\1>/g)

这将匹配<,两种,然后在最后找到相同的两种>

答案 1 :(得分:3)

var s = '<--something--><++something++><**something**>',
    p = s.match(/(<[^>]+>)/g);
console.log(p); // ["<--something-->", "<++something++>", "<**something**>"]

这只是假设每个“令牌”永远不会有>。因此,它将失败,具有以下内容:

<--some>thing--><++something++><**something**>
       ^ problematic

我想强调的是,如果您使用它来解析HTML,就在那里停止。如果您希望从HTML中获取特定元素,则正则表达式不是正确的解决方案。相反,将内容放在隐藏的<div>(或其他东西)中,并使用本机DOM访问器。

答案 2 :(得分:2)

这个表达式应该这样做:

"<--something--><++something++><**something**>".match(/<([+*-])\1.*?\1\1>/g)

它匹配一个开口尖括号,后跟两个相同的字符(取自+-*的一组,但您可以使用.来匹配any;它以相同的两个字符和一个结束尖括号结束。

答案 3 :(得分:-1)

溶液:

var a = "<--something--><++something++><**something**>";
a.match(/\<(\-|\+|\*)+something(\-|\+|\*)+\>/g);

结果:

["<--something-->", "<++something++>", "<**something**>"]