我有一个字符串:
"<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>"
我想将“abcdefg”的所有实例分成如下数组:
["<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>"];
我试试:
var str="<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>";
var Array_Of_FooBars = str.split("</bar>");
alert(Array_Of_FooBars);
但它返回:
["<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg",]
正在删除分隔符''。我不希望这样。
如何使用拆分而不丢失字符串中的分隔符?
感谢。 肯
答案 0 :(得分:8)
试试这个。这不是一个完美的解决方案,但在大多数情况下都应该有效。
str.split(/(?=<foo>)/)
即,将其拆分到每个开始标记之前的位置。
编辑:您也可以使用match()
执行此操作,如下所示:
str.match(/<foo>.*?<\/bar>/g)
答案 1 :(得分:2)
您似乎很可能想要使用匹配:
var s = "<foo>abcd1efg</bar><foo>abc2defg</bar><foo>abc3defg</bar><foo>abc4defg</bar>"
s.match(/(<foo>.+?<\/bar>)/g)
// =>["<foo>abcd1efg</bar>", "<foo>abc2defg</bar>", "<foo>abc3defg</bar>", "<foo>abc4defg</bar>"]
答案 2 :(得分:1)
你可以迭代一个简单的正则表达式并以这种方式构建数组:
var x = new RegExp('<foo>(.*?)</bar>', 'ig'),
s = "<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>",
matches = [];
while (i = x.exec(s)) {
matches.push(i[0]);
}
刚才意识到使用String.match()
会更好;此代码对于匹配标记内的内容更有用。
答案 3 :(得分:0)
使用positive lookahead以便正则表达式断言特殊字符存在,但实际上并不匹配:
string.split(/<br \/>(?=&#?[a-zA-Z0-9]+;)/g);