javascript - 拆分而不会丢失分隔符

时间:2012-10-04 06:56:22

标签: javascript arrays split

  

可能重复:
  JavaScript Split without losing character

我有一个字符串:

"<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",]

正在删除分隔符''。我不希望这样。

如何使用拆分而不丢失字符串中的分隔符?

感谢。 肯

4 个答案:

答案 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);