3

我有以下字符串:

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

字符串可以有任意数量的 "something" ,甚至只有一次。

我需要像这样拆分它:

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

但我不知道如何最好地进行。

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

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

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

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

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

4

4 回答 4

4

您不是在拆分字符串,而是在匹配它。

尝试这个:

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

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

于 2013-05-29T14:24:45.167 回答
3
var s = '<--something--><++something++><**something**>',
    p = s.match(/(<[^>]+>)/g);
console.log(p); // ["<--something-->", "<++something++>", "<**something**>"]

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

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

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

于 2013-05-29T14:24:52.727 回答
2

这个表达式应该这样做:

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

它匹配一个左尖括号,后跟两个相同的字符(取自 , 和 的集合+-*您可以使用.它来匹配任何字符;它以相同的两个字符和一个右尖括号结尾。

于 2013-05-29T14:25:26.463 回答
-1

解决方案:

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

结果:

["<--something-->", "<++something++>", "<**something**>"]
于 2013-05-29T14:27:28.693 回答