2012-10-04 22 views
0

可能重复:
JavaScript Split without losing character的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而不会丢失字符串中的分隔符?

谢谢。 肯

+1

http://stackoverflow.com/questions/3047201/javascript-split-without-losing-character?rq=1 – 2012-10-04 06:58:13

+2

你有一串XML/HMTL元素,如' abcdefg'?我不这么认为。 (翻译:当你编写代码时,它确实会适得其反,而且,你的问题是:*“我想在Y上执行X来获得Z”。*它实际上应该读取*“我有Y,想要Z,我该怎么做?“* - 'split()'不是唯一可行的解​​决方案。) – Tomalak

+0

感谢Tomalak - 非常有帮助-_-如果你不知道答案 - 为什么要打扰你的消极反应? – KDawg

回答

3

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

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

也就是说,将它分成每个开标签前的位置。

编辑:你也可以用match()做到这一点,就像这样:

str.match(/<foo>.*?<\/bar>/g) 
+0

优秀的Namida Aneskans - 正是我问的。非常感谢你的兄弟:) – KDawg

+0

非常高兴知道'.match()方法也能工作。 再次感谢纳米达阿内斯卡纳斯:)我认为我喜欢这场比赛 - 因为看起来会有更少的错误空间 - 匹配一端和另一端的所有东西,并抓住所有的一切?你怎么看? – KDawg

0

使用positive lookahead,使正则表达式断言特殊字符存在,但实际上并没有与之相匹配的:

string.split(/<br \/>(?=&#?[a-zA-Z0-9]+;)/g); 
+0

确定 - 声音很好。我会在你的例子中将''分隔符放在哪里? – KDawg

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()实现会更好;此代码对于匹配标签内的内容会更有用。

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>"] 
+0

我挖了这个,我删除了我的答案+1这一个。 – elclanrs