4

可能重复:
JavaScript 拆分而不丢失字符

我有一个字符串:

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

它正在删除分隔符''。我不想要那个。

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

谢谢。肯

4

4 回答 4

12

试试这个。这不是一个完美的解决方案,但它应该在大多数情况下都有效。

str.split(/(?=<foo>)/)

也就是说,将其拆分在每个开始标签之前的位置。

编辑:你也可以这样做match(),像这样:

str.match(/<foo>.*?<\/bar>/g)
于 2012-10-04T07:03:01.893 回答
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>"]
于 2012-10-04T07:06:41.720 回答
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()会更好;此代码对于匹配标签内的内容会更有用。

于 2012-10-04T07:05:28.127 回答
0

使用正向前瞻,以便正则表达式断言特殊字符存在,但实际上并不匹配:

string.split(/<br \/>(?=&#?[a-zA-Z0-9]+;)/g);
于 2012-10-04T06:59:46.547 回答