我有以下字符串:
"<--something--><++something++><**something**>"
字符串可以有任意数量的“某事”,即使只是一次。
我需要像这样分开它:
["<--something-->", "<++something++>", ...]
但我不知道怎么做得最好。
我会做类似string.split("><")
的事情,但我会做:
["<--something--", "++something++", ...]
使用string.split(/(><)/)
我会得到:
["<--something--", "><", "++something++", "><", ...]
我可以想到一些不太理想的解决方案,但我想要非常优雅的解决方案。
答案 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**>"]